diff --git a/.agents/skills/add-django-config-env-var/SKILL.md b/.agents/skills/add-django-config-env-var/SKILL.md index e3277edd08..b283c82d05 100644 --- a/.agents/skills/add-django-config-env-var/SKILL.md +++ b/.agents/skills/add-django-config-env-var/SKILL.md @@ -1,6 +1,7 @@ --- -name: add-django-config-env-var +name: Add Django Config Env Var description: Add a new environment variable for a Django setting in Baserow and propagate it to the few repo files that usually need it. Use this when a request says a config env var must be added in several places or references `INTEGRATION_LOCAL_BASEROW_PAGE_SIZE_LIMIT` as the pattern to follow. +version: 1.0.0 --- # Add Django Config Env Var @@ -17,6 +18,7 @@ When adding a new setting, usually check these files: - `docker-compose.yml` - `docker-compose.no-caddy.yml` - `web-frontend/env-remap.mjs` +- `docs/installation/configuration.md` — the canonical env-var reference table; add a row in the right section - Backend or frontend code that uses the setting - A focused test if behavior changes @@ -44,7 +46,7 @@ MY_SETTING = int(os.getenv("BASEROW_MY_SETTING", 123)) 5. Add or update a targeted test if the setting changes behavior. -6. Add the related documentation +6. Add the related documentation in `docs/installation/configuration.md` — find the right section (e.g. Backend Configuration, Integration Configuration) and add a table row matching the format of the nearest existing entry. ## Quick Checklist @@ -53,7 +55,7 @@ MY_SETTING = int(os.getenv("BASEROW_MY_SETTING", 123)) 3. Add the Nuxt remap if frontend code needs it 4. Use `settings.` in code 5. Add a focused test if needed -6. Add the documentation +6. Add a row to `docs/installation/configuration.md` ## Guardrails diff --git a/.agents/skills/create-update-service/SKILL.md b/.agents/skills/create-update-service/SKILL.md index 18e8de5e42..3ce7f38fcd 100644 --- a/.agents/skills/create-update-service/SKILL.md +++ b/.agents/skills/create-update-service/SKILL.md @@ -1,6 +1,7 @@ --- -name: create-update-service -description: Allow to create or update Baserow Integrations and Services +name: Integrations and Services +description: Create or update Baserow integration types and service types in `contrib/integrations`. Use when adding a new ServiceType/IntegrationType subclass, registering one in `apps.py` or `plugin.js`, or updating an existing dispatch/auth flow. +version: 1.0.0 --- # Create Or Update Baserow Services And Integrations diff --git a/.agents/skills/write-frontend-unit-test/SKILL.md b/.agents/skills/write-frontend-unit-test/SKILL.md index 85981e2f77..d5b2adb32f 100644 --- a/.agents/skills/write-frontend-unit-test/SKILL.md +++ b/.agents/skills/write-frontend-unit-test/SKILL.md @@ -1,6 +1,7 @@ --- -name: write-frontend-unit-test +name: Write Frontend Unit Test description: Write or update Baserow frontend unit tests for core, premium, or enterprise code using the repo's existing Vitest, Nuxt, Vue Test Utils, TestApp, and snapshot patterns. +version: 1.0.0 --- # Write Baserow Frontend Unit Tests diff --git a/.claude/skills b/.claude/skills new file mode 120000 index 0000000000..2b7a412b8f --- /dev/null +++ b/.claude/skills @@ -0,0 +1 @@ +../.agents/skills \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md index 0dbeaf9a2c..6b911cf6d2 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -31,6 +31,16 @@ Examples: `just b test backend/tests/path/`, `just b test-coverage`, `just f tes Recent history favors short, imperative subjects, often with Conventional Commit prefixes such as `fix:`, `feat:`, and `chore(deps):`. Branch from `develop`, keep PRs focused, and link the related issue or discussion. Include a clear summary, note schema or env changes, attach screenshots for UI work, add a changelog entry when required, and make sure the relevant lint and test commands pass before opening the PR. +## Project Skills + +Reusable skills live in `.agents/skills/`. Each subdirectory is a self-contained skill with a `SKILL.md` that describes when and how to apply it. Use these instead of re-deriving the same workflow from scratch. + +| Skill directory | When to use | +|---|---| +| `add-django-config-env-var` | Adding a new Django setting backed by an env var and propagating it to `base.py`, docker-compose files, `env-remap.mjs`, and `docs/installation/configuration.md` | +| `write-frontend-unit-test` | Writing or fixing frontend unit tests in `web-frontend`, `premium/web-frontend`, or `enterprise/web-frontend` | +| `create-update-service` | Creating or updating an integration type or service type in `contrib/integrations` | + ## Security & Configuration Tips Do not commit secrets or local overrides. Use `.env.local` for development, keep production settings in the documented deploy configs, and report vulnerabilities privately via the contact path in `CONTRIBUTING.md` rather than opening a public issue. diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000000..f6a54e0628 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,5 @@ +@AGENTS.md + +## Skills + +`.claude/skills` is a symlink to `.agents/skills`, the canonical location for project skills. Both paths resolve to the same directory. diff --git a/backend/src/baserow/contrib/builder/data_sources/service.py b/backend/src/baserow/contrib/builder/data_sources/service.py index ece9045612..182f7dbdda 100644 --- a/backend/src/baserow/contrib/builder/data_sources/service.py +++ b/backend/src/baserow/contrib/builder/data_sources/service.py @@ -63,12 +63,15 @@ def get_data_source(self, user: AbstractUser, data_source_id: int) -> DataSource return data_source - def get_data_sources(self, user: AbstractUser, page: Page) -> List[DataSource]: + def get_data_sources( + self, user: AbstractUser, page: Page, with_shared: bool = False + ) -> List[DataSource]: """ Gets all the data_sources of a given page visible to the given user. :param user: The user trying to get the data_sources. :param page: The page that holds the data_sources. + :param with_shared: Whether shared data sources should be included in the result. :return: The data_sources of that page. """ @@ -86,7 +89,11 @@ def get_data_sources(self, user: AbstractUser, page: Page) -> List[DataSource]: workspace=page.builder.workspace, ) - return self.handler.get_data_sources(page, base_queryset=user_data_sources) + return self.handler.get_data_sources( + page, + base_queryset=user_data_sources, + with_shared=with_shared, + ) def get_builder_data_sources( self, user: AbstractUser, builder: "Builder", with_cache=False diff --git a/backend/src/baserow/contrib/database/api/fields/serializers.py b/backend/src/baserow/contrib/database/api/fields/serializers.py index 7d1f2faa49..af07c155c9 100644 --- a/backend/src/baserow/contrib/database/api/fields/serializers.py +++ b/backend/src/baserow/contrib/database/api/fields/serializers.py @@ -587,6 +587,10 @@ def to_internal_value(self, data) -> Optional[str]: return make_password(data) +class ListFieldsQueryParamsSerializer(serializers.Serializer): + view = serializers.IntegerField(required=False) + + class LinkRowFieldSerializerMixin(serializers.ModelSerializer): link_row_table_primary_field = serializers.SerializerMethodField( help_text="The primary field of the table that is linked to." diff --git a/backend/src/baserow/contrib/database/api/fields/views.py b/backend/src/baserow/contrib/database/api/fields/views.py index 32f237c1ed..b2a66b34da 100644 --- a/backend/src/baserow/contrib/database/api/fields/views.py +++ b/backend/src/baserow/contrib/database/api/fields/views.py @@ -7,7 +7,6 @@ from drf_spectacular.openapi import OpenApiParameter, OpenApiTypes from drf_spectacular.utils import extend_schema from rest_framework import status -from rest_framework.decorators import permission_classes as method_permission_classes from rest_framework.permissions import AllowAny, IsAuthenticated from rest_framework.request import Request from rest_framework.response import Response @@ -120,23 +119,35 @@ from baserow.contrib.database.table.handler import TableHandler from baserow.contrib.database.tokens.exceptions import NoPermissionToTable from baserow.contrib.database.tokens.handler import TokenHandler -from baserow.contrib.database.views.exceptions import ViewDoesNotSupportListingRows +from baserow.contrib.database.views.exceptions import ( + ViewDoesNotExist, + ViewDoesNotSupportListingRows, +) +from baserow.contrib.database.views.handler import ViewHandler +from baserow.contrib.database.views.operations import ListViewFieldsOperationType +from baserow.contrib.database.views.registries import view_ownership_type_registry from baserow.core.action.registries import action_type_registry from baserow.core.db import atomic_with_retry_on_deadlock, specific_iterator -from baserow.core.exceptions import UserNotInWorkspace +from baserow.core.exceptions import ( + PermissionException, + UserNotInWorkspace, +) from baserow.core.handler import CoreHandler from baserow.core.jobs.exceptions import MaxJobCountExceeded from baserow.core.jobs.handler import JobHandler from baserow.core.jobs.registries import job_type_registry from baserow.core.trash.exceptions import CannotDeleteAlreadyDeletedItem +from baserow.core.types import PermissionCheck from ...rows.handler import RowHandler +from ..views.errors import ERROR_VIEW_DOES_NOT_EXIST from .serializers import ( ChangePrimaryFieldParamsSerializer, CreateFieldSerializer, DuplicateFieldParamsSerializer, FieldSerializer, FieldSerializerWithRelatedFields, + ListFieldsQueryParamsSerializer, PasswordFieldAuthenticationResponseSerializer, PasswordFieldAuthenticationSerializer, RelatedFieldsSerializer, @@ -190,10 +201,11 @@ def get_permissions(self): TableDoesNotExist: ERROR_TABLE_DOES_NOT_EXIST, UserNotInWorkspace: ERROR_USER_NOT_IN_GROUP, NoPermissionToTable: ERROR_NO_PERMISSION_TO_TABLE, + ViewDoesNotExist: ERROR_VIEW_DOES_NOT_EXIST, } ) - @method_permission_classes([AllowAny]) - def get(self, request, table_id): + @validate_query_parameters(ListFieldsQueryParamsSerializer) + def get(self, request, table_id, query_params): """ Responds with a list of serialized fields that belong to the table if the user has access to that workspace. @@ -201,18 +213,50 @@ def get(self, request, table_id): table = TableHandler().get_table(table_id) - CoreHandler().check_permissions( + view_id = query_params.get("view") + view = ViewHandler().get_view(view_id, table_id=table.id) if view_id else None + + table_check = PermissionCheck( request.user, ListFieldsOperationType.type, - workspace=table.database.workspace, context=table, ) + view_check = PermissionCheck( + request.user, + ListViewFieldsOperationType.type, + context=view, + ) + + checks = [table_check] + if view is not None: + checks.append(view_check) + + check_results = CoreHandler().check_multiple_permissions( + checks, + workspace=table.database.workspace, + return_permissions_exceptions=True, + ) + + if view is None and isinstance(check_results[table_check], PermissionException): + raise check_results[table_check] + + if view is not None and isinstance( + check_results[view_check], PermissionException + ): + raise check_results[view_check] TokenHandler().check_table_permissions( request, ["read", "create", "update"], table, False ) base_field_queryset = FieldHandler().get_base_fields_queryset() + + if view is not None: + ownership_type = view_ownership_type_registry.get(view.ownership_type) + base_field_queryset = ownership_type.enhance_list_fields_queryset( + request.user, view, base_field_queryset + ) + fields = specific_iterator( base_field_queryset.filter(table=table), per_content_type_queryset_hook=( diff --git a/backend/src/baserow/contrib/database/api/rows/serializers.py b/backend/src/baserow/contrib/database/api/rows/serializers.py index 0cf763f8eb..bb338ed7c5 100644 --- a/backend/src/baserow/contrib/database/api/rows/serializers.py +++ b/backend/src/baserow/contrib/database/api/rows/serializers.py @@ -101,6 +101,7 @@ def get_row_serializer_class( base_class=None, is_response=False, field_ids=None, + exclude_field_ids=None, field_names_to_include=None, user_field_names=False, field_kwargs=None, @@ -128,6 +129,9 @@ def get_row_serializer_class( to be included. Note that the field id must exist in the model in order to work. :type field_ids: Optional[Iterable[int]] + :param exclude_field_ids: If provided the field ids in the list will be + excluded from the serializer. + :type exclude_field_ids: Optional[Iterable[int]] :param field_names_to_include: If provided only the field names in the list will be included in the serializer. By default all the fields of the model are going to be included. Note that the field name must exist in the model in @@ -158,11 +162,14 @@ def get_row_serializer_class( for field in field_objects.values(): field_id_matches = field_ids is None or (field["field"].id in field_ids) + field_id_excluded = ( + exclude_field_ids is not None and field["field"].id in exclude_field_ids + ) field_name_matches = field_names_to_include is None or ( field["field"].name in field_names_to_include ) - if field_id_matches and field_name_matches: + if field_id_matches and field_name_matches and not field_id_excluded: name = field["field"].name if user_field_names else field["name"] field_extra_kwargs = field_kwargs.get(field["name"], {}) # If the field is configured to be read-only, then we want the API to diff --git a/backend/src/baserow/contrib/database/api/rows/views.py b/backend/src/baserow/contrib/database/api/rows/views.py index 3538c1d09f..529193547f 100644 --- a/backend/src/baserow/contrib/database/api/rows/views.py +++ b/backend/src/baserow/contrib/database/api/rows/views.py @@ -77,7 +77,10 @@ ERROR_VIEW_FILTER_TYPE_DOES_NOT_EXIST, ERROR_VIEW_FILTER_TYPE_UNSUPPORTED_FIELD, ) -from baserow.contrib.database.api.views.utils import serialize_single_row_metadata +from baserow.contrib.database.api.views.utils import ( + get_hidden_field_ids_for_view_user, + serialize_single_row_metadata, +) from baserow.contrib.database.field_rules.collector import CascadeUpdatedRows from baserow.contrib.database.fields.exceptions import ( FieldDataConstraintException, @@ -129,6 +132,9 @@ from baserow.contrib.database.views.filters import AdHocFilters from baserow.contrib.database.views.handler import ViewHandler from baserow.contrib.database.views.models import View +from baserow.contrib.database.views.operations import ( + ReadAdjacentViewRowOperationType, +) from baserow.core.action.registries import action_type_registry from baserow.core.db import atomic_with_retry_on_deadlock from baserow.core.exceptions import DeadlockException, UserNotInWorkspace @@ -589,7 +595,9 @@ def post(self, request: Request, table_id: int, query_params) -> Response: validation_serializer = get_row_serializer_class( model, user_field_names=user_field_names ) - data = validate_data(validation_serializer, request_data) + data = validate_data( + validation_serializer, request_data, partial=True, return_validated=True + ) before_id = query_params.get("before") before_row = ( @@ -609,14 +617,24 @@ def post(self, request: Request, table_id: int, query_params) -> Response: model=model, before_row=before_row, view=view, - user_field_names=user_field_names, + # user_field_names is False because validate_data with + # return_validated=True already maps user field names to internal field + # names via the serializer. + user_field_names=False, send_webhook_events=send_webhook_events, ) except ValidationError as e: raise RequestBodyValidationException(detail=e.message) + hidden_field_ids = ( + get_hidden_field_ids_for_view_user(request.user, view) if view else None + ) serializer_class = get_row_serializer_class( - model, RowSerializer, is_response=True, user_field_names=user_field_names + model, + RowSerializer, + is_response=True, + user_field_names=user_field_names, + exclude_field_ids=hidden_field_ids, ) serializer = serializer_class(row) @@ -840,8 +858,16 @@ def get(self, request, table_id, row_id, metadata, query_params: dict): user_field_names = extract_user_field_names_from_params(request.GET) model = table.get_model() row = RowHandler().get_row(request.user, table, row_id, model, view=view) + + hidden_field_ids = ( + get_hidden_field_ids_for_view_user(request.user, view) if view else None + ) serializer_class = get_row_serializer_class( - model, RowSerializer, is_response=True, user_field_names=user_field_names + model, + RowSerializer, + is_response=True, + user_field_names=user_field_names, + exclude_field_ids=hidden_field_ids, ) serializer = serializer_class(row) response_data = serializer.data @@ -1003,8 +1029,15 @@ def patch( except ValidationError as exc: raise RequestBodyValidationException(detail=exc.message) from exc + hidden_field_ids = ( + get_hidden_field_ids_for_view_user(request.user, view) if view else None + ) serializer_class = get_row_serializer_class( - model, RowSerializer, is_response=True, user_field_names=user_field_names + model, + RowSerializer, + is_response=True, + user_field_names=user_field_names, + exclude_field_ids=hidden_field_ids, ) serializer = serializer_class(row) return Response(serializer.data) @@ -1368,8 +1401,15 @@ def post(self, request: Request, table_id: int, query_params) -> Response: except ValidationError as exc: raise RequestBodyValidationException(detail=exc.message) + hidden_field_ids = ( + get_hidden_field_ids_for_view_user(request.user, view) if view else None + ) response_row_serializer_class = get_row_serializer_class( - model, RowSerializer, is_response=True, user_field_names=user_field_names + model, + RowSerializer, + is_response=True, + user_field_names=user_field_names, + exclude_field_ids=hidden_field_ids, ) response_serializer_class = get_batch_row_serializer_class( response_row_serializer_class @@ -1521,8 +1561,15 @@ def patch(self, request, table_id, query_params): except ValidationError as e: raise RequestBodyValidationException(detail=e.message) + hidden_field_ids = ( + get_hidden_field_ids_for_view_user(request.user, view) if view else None + ) response_row_serializer_class = get_row_serializer_class( - model, RowSerializer, is_response=True, user_field_names=user_field_names + model, + RowSerializer, + is_response=True, + user_field_names=user_field_names, + exclude_field_ids=hidden_field_ids, ) response_serializer_class = get_batch_row_serializer_class( response_row_serializer_class @@ -1739,14 +1786,6 @@ def get( search_mode = query_params.get("search_mode") table = TableHandler().get_table(table_id) - CoreHandler().check_permissions( - request.user, - ReadAdjacentRowDatabaseRowOperationType.type, - workspace=table.database.workspace, - context=table, - ) - - model = table.get_model() if view_id is None: view = None @@ -1755,6 +1794,17 @@ def get( request.user, view_id, table_id=table.id ) + RowHandler()._check_permissions_with_view_fallback( + ReadAdjacentRowDatabaseRowOperationType.type, + ReadAdjacentViewRowOperationType.type, + request.user, + table, + view, + [row_id], + ) + + model = table.get_model() + adjacent_row = RowHandler().get_adjacent_row( model, row_id, @@ -1768,8 +1818,15 @@ def get( if adjacent_row is None: return Response(status=HTTP_204_NO_CONTENT) + hidden_field_ids = ( + get_hidden_field_ids_for_view_user(request.user, view) if view else None + ) serializer_class = get_row_serializer_class( - model, RowSerializer, is_response=True, user_field_names=user_field_names + model, + RowSerializer, + is_response=True, + user_field_names=user_field_names, + exclude_field_ids=hidden_field_ids, ) serializer = serializer_class(adjacent_row) diff --git a/backend/src/baserow/contrib/database/api/views/gallery/views.py b/backend/src/baserow/contrib/database/api/views/gallery/views.py index 6931e167b2..b5dffb910d 100644 --- a/backend/src/baserow/contrib/database/api/views/gallery/views.py +++ b/backend/src/baserow/contrib/database/api/views/gallery/views.py @@ -46,6 +46,7 @@ ) from baserow.contrib.database.api.views.serializers import FieldOptionsField from baserow.contrib.database.api.views.utils import ( + get_hidden_field_ids_for_view_user, get_public_view_authorization_token, parse_limit_linked_items_params, ) @@ -218,6 +219,16 @@ def get( search_mode = query_params.get("search_mode") model = view.table.get_model() + hidden_field_ids = get_hidden_field_ids_for_view_user(request.user, view) + + only_search_by_field_ids = None + if hidden_field_ids: + only_search_by_field_ids = [ + field_id + for field_id in model._field_objects.keys() + if field_id not in hidden_field_ids + ] + queryset = view_handler.get_queryset( request.user, view, @@ -226,6 +237,7 @@ def get( search_mode=search_mode, apply_sorts=order_by is None, apply_filters=not adhoc_filters.has_any_filters, + only_search_by_field_ids=only_search_by_field_ids, ) if adhoc_filters.has_any_filters: @@ -246,6 +258,7 @@ def get( model, RowSerializer, is_response=True, + exclude_field_ids=hidden_field_ids, extra_kwargs=serializer_extra_kwargs, ) serializer = serializer_class(page, many=True) @@ -253,7 +266,10 @@ def get( response = paginator.get_paginated_response(serializer.data) if field_options: - context = {"fields": [o["field"] for o in model._field_objects.values()]} + fields = [o["field"] for o in model._field_objects.values()] + if hidden_field_ids is not None: + fields = [f for f in fields if f.id not in hidden_field_ids] + context = {"fields": fields} serializer_class = view_type.get_field_options_serializer_class( create_if_missing=True ) diff --git a/backend/src/baserow/contrib/database/api/views/grid/views.py b/backend/src/baserow/contrib/database/api/views/grid/views.py index 6e88bf12bb..a53e16915f 100644 --- a/backend/src/baserow/contrib/database/api/views/grid/views.py +++ b/backend/src/baserow/contrib/database/api/views/grid/views.py @@ -57,6 +57,7 @@ ) from baserow.contrib.database.api.views.serializers import FieldOptionsField from baserow.contrib.database.api.views.utils import ( + get_hidden_field_ids_for_view_user, get_public_view_authorization_token, get_public_view_filtered_queryset, get_view_filtered_queryset, @@ -246,9 +247,15 @@ def get(self, request, view_id, field_options, row_metadata, query_params): field_ids = get_include_exclude_field_ids( view.table, include_fields, exclude_fields ) + hidden_field_ids = get_hidden_field_ids_for_view_user(request.user, view) queryset = get_view_filtered_queryset( - request.user, view, adhoc_filters, order_by, query_params + request.user, + view, + adhoc_filters, + order_by, + query_params, + hidden_field_ids=hidden_field_ids, ) model = queryset.model @@ -256,7 +263,7 @@ def get(self, request, view_id, field_options, row_metadata, query_params): return Response({"count": queryset.count()}) response, page, _ = paginate_and_serialize_queryset( - queryset, request, field_ids + queryset, request, field_ids, exclude_field_ids=hidden_field_ids ) if view_type.can_group_by and view.viewgroupby_set.all(): @@ -270,7 +277,11 @@ def get(self, request, view_id, field_options, row_metadata, query_params): response.data.update(group_by_metadata=serialized_group_by_metadata) if field_options: - response.data.update(**serialize_view_field_options(view, model)) + response.data.update( + **serialize_view_field_options( + view, model, exclude_field_ids=hidden_field_ids + ) + ) if row_metadata: response.data.update( @@ -342,12 +353,16 @@ def post(self, request, view_id, data): workspace=view.table.database.workspace, context=view.table, ) + hidden_field_ids = get_hidden_field_ids_for_view_user(request.user, view) model = view.table.get_model(field_ids=data["field_ids"]) results = model.objects.filter(pk__in=data["row_ids"]) serializer_class = get_row_serializer_class( - model, RowSerializer, is_response=True + model, + RowSerializer, + is_response=True, + exclude_field_ids=hidden_field_ids, ) serializer = serializer_class(results, many=True) return Response(serializer.data) diff --git a/backend/src/baserow/contrib/database/api/views/serializers.py b/backend/src/baserow/contrib/database/api/views/serializers.py index 6849362835..2236bad7bd 100644 --- a/backend/src/baserow/contrib/database/api/views/serializers.py +++ b/backend/src/baserow/contrib/database/api/views/serializers.py @@ -121,6 +121,15 @@ def to_representation(self, value): field_options = value.get_field_options( self.create_if_missing, self.context.get("fields") ) + # `get_field_options` returns options for all fields in the table, but + # restricted views must hide options for fields the user can't access. The + # context fields list acts as an allow-list. + context_fields = self.context.get("fields") + if context_fields is not None: + allowed_field_ids = {f.id for f in context_fields} + field_options = [ + fo for fo in field_options if fo.field_id in allowed_field_ids + ] return { field_options.field_id: self.serializer_class(field_options).data for field_options in field_options diff --git a/backend/src/baserow/contrib/database/api/views/utils.py b/backend/src/baserow/contrib/database/api/views/utils.py index 505296a296..a273851cde 100644 --- a/backend/src/baserow/contrib/database/api/views/utils.py +++ b/backend/src/baserow/contrib/database/api/views/utils.py @@ -1,5 +1,5 @@ from dataclasses import Field -from typing import Any, Dict, Iterable, List, NamedTuple, Optional, Type +from typing import Any, Dict, Iterable, List, NamedTuple, Optional, Set, Type from django.conf import settings from django.contrib.auth.models import AbstractUser @@ -29,7 +29,10 @@ from baserow.contrib.database.views.filters import AdHocFilters from baserow.contrib.database.views.handler import ViewHandler from baserow.contrib.database.views.models import View -from baserow.contrib.database.views.registries import view_type_registry +from baserow.contrib.database.views.registries import ( + view_ownership_type_registry, + view_type_registry, +) def get_public_view_authorization_token(request: Request) -> Optional[str]: @@ -48,6 +51,20 @@ def get_public_view_authorization_token(request: Request) -> Optional[str]: return token +def get_hidden_field_ids_for_view_user( + user: AbstractUser, view: View +) -> Optional[Set[int]]: + """ + Returns the set of field IDs that should be hidden from `user` in this view, + or `None` if no restriction applies (all fields visible). + """ + + if hasattr(view, "_hidden_field_ids"): + return view._hidden_field_ids + ownership_type = view_ownership_type_registry.get(view.ownership_type) + return ownership_type.get_hidden_field_ids_for_user(user, view) + + def get_view_filtered_queryset( user: AbstractUser, view: Type[View], @@ -55,6 +72,7 @@ def get_view_filtered_queryset( order_by: Optional[str] = None, query_params: Optional[Dict[str, Any]] = None, model: Optional[GeneratedTableModel] = None, + hidden_field_ids: Optional[Set[int]] = None, ) -> QuerySet: """ Returns a queryset that is filtered based on the provided view, adhoc filters, and @@ -67,6 +85,8 @@ def get_view_filtered_queryset( :param order_by: The order by string to apply to the queryset. :param query_params: The query parameters to apply to the queryset. :param model: The model to filter the queryset by. + :param hidden_field_ids: Optional set of field IDs hidden from the user. When + provided, search will be restricted to visible fields only. :return: The filtered queryset. """ @@ -81,6 +101,14 @@ def get_view_filtered_queryset( search_value = query_params.get("search") search_mode = query_params.get("search_mode") + only_search_by_field_ids = None + if hidden_field_ids: + only_search_by_field_ids = [ + field_id + for field_id in model._field_objects.keys() + if field_id not in hidden_field_ids + ] + queryset = ViewHandler().get_queryset( user, view, @@ -89,6 +117,7 @@ def get_view_filtered_queryset( search=search_value, search_mode=search_mode, model=model, + only_search_by_field_ids=only_search_by_field_ids, ) if has_adhoc_sorts: @@ -204,6 +233,7 @@ def paginate_and_serialize_queryset( queryset: QuerySet[GeneratedTableModel], request: Request, field_ids: Optional[Iterable[int]], + exclude_field_ids: Optional[Iterable[int]] = None, ) -> PaginatedData: """ Paginate and serialize the data for the provided queryset and view. @@ -211,6 +241,8 @@ def paginate_and_serialize_queryset( :param queryset: The queryset to paginate and serialize. :param request: The request containing the pagination query parameters. :param field_ids: The (optional) field IDs to restrict the serialized data to. + :param exclude_field_ids: Field IDs hidden by restricted view ownership. None + means no restriction applies. :return: The paginated data containing the paginator, the page of results, and response containing the serialized data. """ @@ -226,6 +258,7 @@ def paginate_and_serialize_queryset( RowSerializer, is_response=True, field_ids=field_ids, + exclude_field_ids=exclude_field_ids, extra_kwargs=extra_kwargs, ) serializer = serializer_class(page, many=True) @@ -239,6 +272,7 @@ def serialize_view_field_options( model: GeneratedTableModel, create_if_missing: bool = True, context: Optional[Dict[str, Any]] = None, + exclude_field_ids: Optional[Iterable[int]] = None, ) -> Dict[str, Any]: """ Serializes the view field options for the provided view and the given model. @@ -247,11 +281,16 @@ def serialize_view_field_options( :param model: The model to serialize the field options for. :param create_if_missing: Whether to create the field options if they are missing. :param context: The context to serialize the field options with. + :param exclude_field_ids: Field IDs hidden by restricted view ownership. None + means no restriction applies. :return: The serialized view field options. """ if context is None: - context = {"fields": [o["field"] for o in model._field_objects.values()]} + fields = [o["field"] for o in model._field_objects.values()] + if exclude_field_ids is not None: + fields = [f for f in fields if f.id not in exclude_field_ids] + context = {"fields": fields} view_type = view_type_registry.get_by_model(view) serializer_class = view_type.get_field_options_serializer_class( diff --git a/backend/src/baserow/contrib/database/apps.py b/backend/src/baserow/contrib/database/apps.py index ecfaf0c746..edba83035d 100755 --- a/backend/src/baserow/contrib/database/apps.py +++ b/backend/src/baserow/contrib/database/apps.py @@ -848,11 +848,13 @@ def ready(self): DuplicateViewOperationType, ListAggregationsViewOperationType, ListViewDecorationOperationType, + ListViewFieldsOperationType, ListViewFilterOperationType, ListViewGroupByOperationType, ListViewsOperationType, ListViewSortOperationType, OrderViewsOperationType, + ReadAdjacentViewRowOperationType, ReadAggregationsViewOperationType, ReadViewDecorationOperationType, ReadViewFieldOptionsOperationType, @@ -884,6 +886,8 @@ def ready(self): ) operation_type_registry.register(ReadViewRowOperationType()) + operation_type_registry.register(ReadAdjacentViewRowOperationType()) + operation_type_registry.register(ListViewFieldsOperationType()) operation_type_registry.register(CreateViewRowOperationType()) operation_type_registry.register(UpdateViewRowOperationType()) operation_type_registry.register(DeleteViewRowOperationType()) diff --git a/backend/src/baserow/contrib/database/rows/handler.py b/backend/src/baserow/contrib/database/rows/handler.py index 15362742dd..40ad3c30fa 100644 --- a/backend/src/baserow/contrib/database/rows/handler.py +++ b/backend/src/baserow/contrib/database/rows/handler.py @@ -844,6 +844,15 @@ def create_row( if not values: values = {} + # Map user field names to internal field keys before permission checks + # so that hidden-field and write-permission checks can identify field IDs. + if user_field_names: + values = self.map_user_field_name_dict_to_internal( + model._field_objects, values + ) + user_field_names = False + + self._raise_if_values_contain_hidden_fields(user, view, [values]) self._check_write_fields_values_permissions(user, model, [values]) return self.force_create_row( @@ -1133,6 +1142,7 @@ def update_row( updated_fields_by_name[field["name"]] = field["field"] updated_fields.append(field["field"]) + self._raise_if_values_contain_hidden_fields(user, view, [values]) self._check_write_fields_values_permissions(user, model, [values]) rows = [row] @@ -1546,6 +1556,7 @@ def create_rows( if model is None: model = table.get_model() + self._raise_if_values_contain_hidden_fields(user, view, rows_values) self._check_write_fields_values_permissions(user, model, rows_values) return self.force_create_rows( @@ -2160,6 +2171,34 @@ def _check_write_fields_values_permissions( ) return unwritable_fields + def _raise_if_values_contain_hidden_fields( + self, + user: AbstractUser, + view: Optional["View"], + rows_values: List[Dict[str, Any]], + ) -> None: + """ + Prevents editors from writing to fields they can't see. Without this, + an editor on a restricted view could modify hidden cell values by + including them in the request body. + + :param rows_values: A list of dicts. The hidden field IDs are resolved once and + then checked against all provided dicts. + """ + + if view is None or not rows_values: + return + ownership_type = view_ownership_type_registry.get(view.ownership_type) + hidden_ids = ownership_type.get_hidden_field_ids_for_user(user, view) + if not hidden_ids: + return + + for row_values in rows_values: + for key in row_values.keys(): + field_id = get_field_id_from_field_key(key) + if field_id is not None and field_id in hidden_ids: + raise PermissionDenied() + def force_update_rows( self, user: AbstractUser, @@ -2585,6 +2624,7 @@ def update_rows( if model is None: model = table.get_model() + self._raise_if_values_contain_hidden_fields(user, view, rows_values) self._check_write_fields_values_permissions(user, model, rows_values) return self.force_update_rows( diff --git a/backend/src/baserow/contrib/database/views/operations.py b/backend/src/baserow/contrib/database/views/operations.py index 7c1da3d24f..a6cc0d334c 100644 --- a/backend/src/baserow/contrib/database/views/operations.py +++ b/backend/src/baserow/contrib/database/views/operations.py @@ -36,6 +36,14 @@ class ReadViewRowOperationType(ViewRowOperationType): type = "database.table.view.read_row" +class ReadAdjacentViewRowOperationType(ViewRowOperationType): + type = "database.table.view.read_adjacent_row" + + +class ListViewFieldsOperationType(ViewOperationType): + type = "database.table.view.list_fields" + + class CreateViewRowOperationType(ViewRowOperationType): type = "database.table.view.create_row" diff --git a/backend/src/baserow/contrib/database/views/registries.py b/backend/src/baserow/contrib/database/views/registries.py index 60602a3af6..981fad26bb 100644 --- a/backend/src/baserow/contrib/database/views/registries.py +++ b/backend/src/baserow/contrib/database/views/registries.py @@ -1499,6 +1499,34 @@ def can_modify_rows( return False + def get_hidden_field_ids_for_user( + self, user: Optional["AbstractUser"], view: "View" + ) -> Set[int]: + """ + Returns an empty set by default, meaning no field restriction applies (all + fields visible). Subclasses can return a set of field IDs that should be hidden + from the user. An empty `set()` means "no restriction", `{1, 2}` means field + with 1 and 2 are hidden. + """ + + return set() + + def enhance_list_fields_queryset( + self, user: "AbstractUser", view: "View", queryset: django_models.QuerySet + ) -> django_models.QuerySet: + """ + Hook to change the queryset that is used when listing all the fields. This can + for example be used to limit the returned fields, if needed. + + :param user: The user on whose behalf the fields are requested. + :param view: The view that is provided when listing the fields. + :param queryset: The queryset to fetch the fields. Note that this will be + converted into a specific queryset. + :return: The enhanced queryset. + """ + + return queryset + class ViewOwnershipTypeRegistry(Registry): """ diff --git a/backend/templates/ab-testing.json b/backend/templates/ab-testing.json new file mode 100644 index 0000000000..a6acf002ac --- /dev/null +++ b/backend/templates/ab-testing.json @@ -0,0 +1,15141 @@ +{ + "baserow_template_version": 1, + "name": "A/B Testing", + "icon": "iconoir-test-tube", + "keywords": [ + "experiments", + "variants", + "A/B testing", + "campaigns", + "hypothesis", + "priority score", + "confidence score", + "opportunity index" + ], + "categories": [ + "Marketing" + ], + "open_application": 343, + "export": [ + { + "id": 343, + "name": "A/B testing", + "order": 1, + "type": "database", + "tables": [ + { + "id": 963, + "name": "Employees", + "order": 1, + "fields": [ + { + "id": 9030, + "type": "text", + "name": "Name", + "description": null, + "order": 0, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 9031, + "type": "email", + "name": "Email", + "description": null, + "order": 1, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [] + }, + { + "id": 9032, + "type": "phone_number", + "name": "Phone", + "description": null, + "order": 2, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [] + }, + { + "id": 9033, + "type": "link_row", + "name": "Experiments", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 968, + "link_row_related_field_id": 9059, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + } + ], + "views": [ + { + "id": 4411, + "type": "grid", + "name": "All employees", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 36651, + "field_id": 9030, + "width": 200, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36652, + "field_id": 9031, + "width": 233, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36653, + "field_id": 9032, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36654, + "field_id": 9033, + "width": 200, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2025-11-13T08:51:48.262523+00:00", + "updated_on": "2026-01-12T12:47:41.900689+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9030": "Allie Ecker", + "field_9031": "allie.ecker@example.com", + "field_9032": "(949) 873-7292", + "field_9033": [ + 3 + ] + }, + { + "id": 2, + "order": "2.00000000000000000000", + "created_on": "2025-11-13T08:51:48.262580+00:00", + "updated_on": "2026-01-12T12:47:41.900773+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9030": "Bran Lopez", + "field_9031": "bran.lopez@example.com", + "field_9032": "(650) 869-3623", + "field_9033": [ + 4 + ] + }, + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2025-11-13T08:51:48.262615+00:00", + "updated_on": "2026-01-12T12:47:41.900820+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9030": "Cinda Pullen", + "field_9031": "cinda.pullen@example.com", + "field_9032": "(213) 743-1636", + "field_9033": [ + 5 + ] + }, + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2025-11-13T08:51:48.262661+00:00", + "updated_on": "2026-01-12T12:47:41.900846+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9030": "Clayton Best", + "field_9031": "clayton.best@example.com", + "field_9032": "(916) 478-0153", + "field_9033": [ + 6 + ] + }, + { + "id": 5, + "order": "5.00000000000000000000", + "created_on": "2025-11-13T08:51:48.262694+00:00", + "updated_on": "2026-01-12T12:47:41.900872+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9030": "Donald Johns", + "field_9031": "donald.johns@example.com", + "field_9032": "(805) 367-1199", + "field_9033": [ + 7 + ] + } + ], + "data_sync": null, + "field_rules": [] + }, + { + "id": 964, + "name": "Markets", + "order": 2, + "fields": [ + { + "id": 9034, + "type": "text", + "name": "Market Name", + "description": null, + "order": 0, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 9035, + "type": "link_row", + "name": "Campaigns", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 967, + "link_row_related_field_id": 9052, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 9081, + "type": "count", + "name": "Number of campaigns", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": 0, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": false, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "through_field_id": 9035 + } + ], + "views": [ + { + "id": 4412, + "type": "grid", + "name": "All markets", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 36655, + "field_id": 9034, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36656, + "field_id": 9035, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36657, + "field_id": 9081, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2025-11-13T09:20:45.508112+00:00", + "updated_on": "2025-11-13T09:24:56.541584+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9034": "DACH", + "field_9035": [ + 3, + 4 + ], + "field_9081": null + }, + { + "id": 2, + "order": "2.00000000000000000000", + "created_on": "2025-11-13T09:20:45.508194+00:00", + "updated_on": "2025-11-13T09:25:04.824770+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9034": "Southeast Asia", + "field_9035": [ + 7, + 5 + ], + "field_9081": null + }, + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2025-11-13T09:20:45.508237+00:00", + "updated_on": "2025-11-13T09:25:11.189463+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9034": "Latin America", + "field_9035": [ + 6 + ], + "field_9081": null + }, + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2025-11-13T09:20:45.508278+00:00", + "updated_on": "2025-11-13T09:25:15.081576+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9034": "East Africa", + "field_9035": [], + "field_9081": null + }, + { + "id": 5, + "order": "5.00000000000000000000", + "created_on": "2025-11-13T09:20:45.508319+00:00", + "updated_on": "2025-11-13T09:25:19.925573+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9034": "Oceania", + "field_9035": [], + "field_9081": null + } + ], + "data_sync": null, + "field_rules": [] + }, + { + "id": 965, + "name": "Brands", + "order": 3, + "fields": [ + { + "id": 9036, + "type": "text", + "name": "Name", + "description": null, + "order": 1, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 9038, + "type": "text", + "name": "Description", + "description": null, + "order": 2, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 9039, + "type": "link_row", + "name": "Campaigns", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 967, + "link_row_related_field_id": 9045, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 9082, + "type": "count", + "name": "Number of campaigns", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": 0, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": false, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "through_field_id": 9039 + } + ], + "views": [ + { + "id": 4413, + "type": "grid", + "name": "All brands", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 36659, + "field_id": 9036, + "width": 135, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36660, + "field_id": 9038, + "width": 467, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36661, + "field_id": 9039, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36662, + "field_id": 9082, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2025-11-13T09:02:48.443590+00:00", + "updated_on": "2026-01-12T12:49:54.918830+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9036": "Brewvella", + "field_9038": "A worldwide brand of instant coffee and related products.", + "field_9039": [ + 3 + ], + "field_9082": null + }, + { + "id": 2, + "order": "2.00000000000000000000", + "created_on": "2025-11-13T09:02:48.443641+00:00", + "updated_on": "2026-01-12T12:49:54.918909+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9036": "Waforio", + "field_9038": "A chocolate-covered wafer bar confection produced internationally.", + "field_9039": [ + 4 + ], + "field_9082": null + }, + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2025-11-13T09:02:48.443650+00:00", + "updated_on": "2026-01-12T12:49:54.918946+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9036": "Savoryx", + "field_9038": "A brand of seasonings, instant soups, and noodles.", + "field_9039": [ + 5 + ], + "field_9082": null + }, + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2025-11-13T09:02:48.443656+00:00", + "updated_on": "2026-01-12T12:49:54.918971+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9036": "Aquaryth", + "field_9038": "A popular bottled water brand sold globally.", + "field_9039": [ + 6 + ], + "field_9082": null + }, + { + "id": 5, + "order": "5.00000000000000000000", + "created_on": "2025-11-13T09:02:48.443662+00:00", + "updated_on": "2026-01-12T12:49:54.918996+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9036": "Podesso", + "field_9038": "A brand of coffee machines and coffee pods.", + "field_9039": [ + 7 + ], + "field_9082": null + }, + { + "id": 6, + "order": "6.00000000000000000000", + "created_on": "2025-11-13T09:02:48.443671+00:00", + "updated_on": "2026-01-12T12:49:54.919020+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9036": "Chocmaltia", + "field_9038": "A chocolate and malt powder drink with milk or water.", + "field_9039": [], + "field_9082": null + }, + { + "id": 7, + "order": "7.00000000000000000000", + "created_on": "2025-11-13T09:02:48.443681+00:00", + "updated_on": "2026-01-12T12:49:54.919044+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9036": "Milkara", + "field_9038": "A brand associated with evaporated milk and other products.", + "field_9039": [], + "field_9082": null + }, + { + "id": 8, + "order": "8.00000000000000000000", + "created_on": "2025-11-13T09:02:48.443687+00:00", + "updated_on": "2026-01-12T12:49:54.919068+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9036": "Coloribbles", + "field_9038": "Colorful sugar-coated chocolate confectionery.", + "field_9039": [], + "field_9082": null + }, + { + "id": 9, + "order": "9.00000000000000000000", + "created_on": "2025-11-13T09:02:48.443692+00:00", + "updated_on": "2026-01-12T12:49:54.919092+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9036": "Creamyra", + "field_9038": "Non-dairy creamer product for coffee.", + "field_9039": [], + "field_9082": null + }, + { + "id": 10, + "order": "10.00000000000000000000", + "created_on": "2025-11-13T09:02:48.443699+00:00", + "updated_on": "2026-01-12T12:49:54.919116+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9036": "Babyvera", + "field_9038": "A well-known brand for baby foods and products.", + "field_9039": [], + "field_9082": null + } + ], + "data_sync": null, + "field_rules": [] + }, + { + "id": 966, + "name": "KPI", + "order": 4, + "fields": [ + { + "id": 9040, + "type": "text", + "name": "Name", + "description": null, + "order": 0, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 9041, + "type": "text", + "name": "Description", + "description": null, + "order": 1, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 9042, + "type": "link_row", + "name": "Primary", + "description": null, + "order": 2, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 968, + "link_row_related_field_id": 9055, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 9043, + "type": "link_row", + "name": "Secondary", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 968, + "link_row_related_field_id": 9056, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 9083, + "type": "count", + "name": "Used as primary KPI", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": 0, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": false, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "through_field_id": 9042 + }, + { + "id": 9084, + "type": "count", + "name": "Used as secondary KPI", + "description": null, + "order": 5, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": 0, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": false, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "through_field_id": 9043 + }, + { + "id": 9099, + "type": "formula", + "name": "Total usage", + "description": null, + "order": 6, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": 0, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": false, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "formula": "field('Used as primary KPI') + field('Used as secondary KPI')", + "formula_type": "number" + } + ], + "views": [ + { + "id": 4414, + "type": "grid", + "name": "All KPIs", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 36663, + "field_id": 9040, + "width": 200, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36664, + "field_id": 9041, + "width": 420, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36665, + "field_id": 9042, + "width": 200, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36666, + "field_id": 9043, + "width": 264, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36667, + "field_id": 9083, + "width": 200, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36668, + "field_id": 9084, + "width": 200, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36669, + "field_id": 9099, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 4445, + "type": "grid", + "name": "KPIs used in more than 3 experiments", + "order": 2, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 2661, + "field_id": 9099, + "type": "higher_than", + "value": "3", + "group": null + } + ], + "filter_groups": [], + "sortings": [ + { + "id": 2895, + "field_id": 9099, + "order": "DESC" + } + ], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 37068, + "field_id": 9040, + "width": 200, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37069, + "field_id": 9041, + "width": 420, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37070, + "field_id": 9042, + "width": 200, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37071, + "field_id": 9043, + "width": 264, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37072, + "field_id": 9083, + "width": 200, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37073, + "field_id": 9084, + "width": 200, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37074, + "field_id": 9099, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2025-11-13T08:46:30.151616+00:00", + "updated_on": "2025-11-13T08:48:51.211150+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9040": "Click-Through rate", + "field_9041": "Percentage of users who clicked on a link or ad.", + "field_9042": [ + 3 + ], + "field_9043": [ + 7 + ], + "field_9083": null, + "field_9084": null, + "field_9099": null + }, + { + "id": 2, + "order": "2.00000000000000000000", + "created_on": "2025-11-13T08:46:30.151718+00:00", + "updated_on": "2025-11-13T08:48:51.211265+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9040": "Conversion rate", + "field_9041": "Percentage of visits that result in a desired action.", + "field_9042": [ + 4, + 7 + ], + "field_9043": [ + 3, + 6 + ], + "field_9083": null, + "field_9084": null, + "field_9099": null + }, + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2025-11-13T08:47:05.488219+00:00", + "updated_on": "2025-11-13T08:48:51.211318+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9040": "Add-to-cart rate", + "field_9041": "Percent of visitors adding at least one item to cart.", + "field_9042": [ + 6 + ], + "field_9043": [], + "field_9083": null, + "field_9084": null, + "field_9099": null + }, + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2025-11-13T08:47:18.957677+00:00", + "updated_on": "2025-11-13T08:48:51.211344+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9040": "Bounce rate", + "field_9041": "Percent of visitors who leave after viewing only one page.", + "field_9042": [], + "field_9043": [ + 4 + ], + "field_9083": null, + "field_9084": null, + "field_9099": null + }, + { + "id": 5, + "order": "5.00000000000000000000", + "created_on": "2025-11-13T08:47:31.445716+00:00", + "updated_on": "2025-11-13T08:48:51.211371+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9040": "Scroll depth", + "field_9041": "How far down a page users scroll, on average.", + "field_9042": [ + 5 + ], + "field_9043": [ + 5 + ], + "field_9083": null, + "field_9084": null, + "field_9099": null + }, + { + "id": 6, + "order": "6.00000000000000000000", + "created_on": "2025-11-13T08:47:37.930138+00:00", + "updated_on": "2025-11-13T08:48:51.211397+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9040": "Time on page", + "field_9041": "Total time a user spends on a single page.", + "field_9042": [], + "field_9043": [], + "field_9083": null, + "field_9084": null, + "field_9099": null + }, + { + "id": 7, + "order": "7.00000000000000000000", + "created_on": "2025-11-13T08:47:41.702558+00:00", + "updated_on": "2025-11-13T08:48:51.211422+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9040": "Average time on page", + "field_9041": "The average time users spend on a page.", + "field_9042": [], + "field_9043": [], + "field_9083": null, + "field_9084": null, + "field_9099": null + }, + { + "id": 8, + "order": "8.00000000000000000000", + "created_on": "2025-11-13T08:47:51.076047+00:00", + "updated_on": "2025-11-13T08:48:51.211448+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9040": "Abandonment rate", + "field_9041": "Percentage of users who abandon before completing a process.", + "field_9042": [], + "field_9043": [], + "field_9083": null, + "field_9084": null, + "field_9099": null + }, + { + "id": 9, + "order": "9.00000000000000000000", + "created_on": "2025-11-13T08:47:58.005069+00:00", + "updated_on": "2025-11-13T08:48:51.211472+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9040": "Session duration", + "field_9041": "How long a session lasts from start to end.", + "field_9042": [], + "field_9043": [], + "field_9083": null, + "field_9084": null, + "field_9099": null + } + ], + "data_sync": null, + "field_rules": [] + }, + { + "id": 967, + "name": "Campaigns", + "order": 5, + "fields": [ + { + "id": 9044, + "type": "text", + "name": "Name", + "description": null, + "order": 0, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 9045, + "type": "link_row", + "name": "Brand", + "description": null, + "order": 1, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 965, + "link_row_related_field_id": 9039, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 9046, + "type": "text", + "name": "Objective", + "description": null, + "order": 2, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 9047, + "type": "date", + "name": "Start Date", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_format": "EU", + "date_include_time": false, + "date_time_format": "24", + "date_show_tzinfo": false, + "date_force_timezone": null + }, + { + "id": 9048, + "type": "date", + "name": "End Date", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_format": "EU", + "date_include_time": false, + "date_time_format": "24", + "date_show_tzinfo": false, + "date_force_timezone": null + }, + { + "id": 9049, + "type": "number", + "name": "Budget", + "description": null, + "order": 5, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_decimal_places": 0, + "number_negative": false, + "number_prefix": "", + "number_suffix": "EUR", + "number_separator": "", + "number_default": null + }, + { + "id": 9050, + "type": "long_text", + "name": "Description", + "description": null, + "order": 7, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "long_text_enable_rich_text": false + }, + { + "id": 9051, + "type": "link_row", + "name": "Experiments", + "description": null, + "order": 8, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 968, + "link_row_related_field_id": 9061, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 9052, + "type": "link_row", + "name": "Market", + "description": null, + "order": 9, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 964, + "link_row_related_field_id": 9035, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 9085, + "type": "count", + "name": "Number of experiments", + "description": null, + "order": 10, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": 0, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": false, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "through_field_id": 9051 + } + ], + "views": [ + { + "id": 4415, + "type": "grid", + "name": "All campaigns", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [ + { + "id": 2883, + "field_id": 9047, + "order": "DESC" + } + ], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 36670, + "field_id": 9044, + "width": 284, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36671, + "field_id": 9050, + "width": 777, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36672, + "field_id": 9045, + "width": 183, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36673, + "field_id": 9052, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36674, + "field_id": 9046, + "width": 310, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36675, + "field_id": 9047, + "width": 131, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36676, + "field_id": 9048, + "width": 117, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36677, + "field_id": 9049, + "width": 200, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36678, + "field_id": 9051, + "width": 200, + "hidden": true, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36679, + "field_id": 9085, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 4416, + "type": "grid", + "name": "All campaigns grouped by brand", + "order": 2, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [ + { + "id": 2884, + "field_id": 9047, + "order": "DESC" + } + ], + "group_bys": [ + { + "id": 481, + "field_id": 9045, + "order": "ASC" + } + ], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 36680, + "field_id": 9044, + "width": 284, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36681, + "field_id": 9050, + "width": 311, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36682, + "field_id": 9045, + "width": 183, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36683, + "field_id": 9052, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36684, + "field_id": 9046, + "width": 310, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36685, + "field_id": 9047, + "width": 131, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36686, + "field_id": 9048, + "width": 117, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36687, + "field_id": 9049, + "width": 200, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36688, + "field_id": 9051, + "width": 200, + "hidden": true, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36689, + "field_id": 9085, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 4417, + "type": "grid", + "name": "All campaigns grouped by market", + "order": 3, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [ + { + "id": 2885, + "field_id": 9047, + "order": "DESC" + } + ], + "group_bys": [ + { + "id": 482, + "field_id": 9052, + "order": "ASC" + } + ], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 36690, + "field_id": 9044, + "width": 284, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36691, + "field_id": 9050, + "width": 311, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36692, + "field_id": 9045, + "width": 183, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36693, + "field_id": 9052, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36694, + "field_id": 9046, + "width": 310, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36695, + "field_id": 9047, + "width": 131, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36696, + "field_id": 9048, + "width": 117, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36697, + "field_id": 9049, + "width": 200, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36698, + "field_id": 9051, + "width": 200, + "hidden": true, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36699, + "field_id": 9085, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 4418, + "type": "timeline", + "name": "Timeline: all campaigns", + "order": 4, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [ + { + "id": 2886, + "field_id": 9047, + "order": "DESC" + } + ], + "decorations": [], + "public": false, + "start_date_field_id": 9047, + "end_date_field_id": 9048, + "field_options": [ + { + "id": 385, + "field_id": 9044, + "hidden": false, + "order": 32767 + }, + { + "id": 386, + "field_id": 9045, + "hidden": true, + "order": 32767 + }, + { + "id": 387, + "field_id": 9046, + "hidden": true, + "order": 32767 + }, + { + "id": 388, + "field_id": 9047, + "hidden": true, + "order": 32767 + }, + { + "id": 389, + "field_id": 9048, + "hidden": true, + "order": 32767 + }, + { + "id": 390, + "field_id": 9049, + "hidden": true, + "order": 32767 + }, + { + "id": 391, + "field_id": 9050, + "hidden": true, + "order": 32767 + }, + { + "id": 392, + "field_id": 9051, + "hidden": true, + "order": 32767 + }, + { + "id": 393, + "field_id": 9052, + "hidden": true, + "order": 32767 + }, + { + "id": 394, + "field_id": 9085, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 4419, + "type": "form", + "name": "Campaign Form", + "order": 5, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "public": false, + "title": "Campaign Form", + "description": "", + "cover_image": null, + "logo_image": null, + "submit_text": "Submit", + "submit_action": "MESSAGE", + "submit_action_message": "", + "submit_action_redirect_url": "", + "field_options": [ + { + "id": 3281, + "field_id": 9044, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3282, + "field_id": 9045, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3283, + "field_id": 9046, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3284, + "field_id": 9047, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3285, + "field_id": 9048, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3286, + "field_id": 9049, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3287, + "field_id": 9050, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3288, + "field_id": 9051, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3289, + "field_id": 9052, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3290, + "field_id": 9085, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + } + ] + } + ], + "rows": [ + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2025-11-13T09:06:46.944310+00:00", + "updated_on": "2026-01-12T12:50:20.337419+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9044": "Awaken Your Senses with Brewvella", + "field_9045": [ + 1 + ], + "field_9046": "Increase brand awareness among young adults", + "field_9047": "2025-10-06", + "field_9048": "2025-12-11", + "field_9049": "100000", + "field_9050": "A multi-channel digital campaign targeting coffee lovers with influencer partnerships and interactive social content.", + "field_9051": [ + 3 + ], + "field_9052": [ + 1 + ], + "field_9085": null + }, + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2025-11-13T09:06:46.944545+00:00", + "updated_on": "2026-01-12T12:50:31.017652+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9044": "Waforio Break Challenge", + "field_9045": [ + 2 + ], + "field_9046": "Boost product trials and social buzz", + "field_9047": "2025-07-01", + "field_9048": "2025-10-09", + "field_9049": "80000", + "field_9050": "Encourages consumers to share their #HaveABreak moments on social media, with weekly prizes for best entries.", + "field_9051": [ + 4 + ], + "field_9052": [ + 1 + ], + "field_9085": null + }, + { + "id": 5, + "order": "5.00000000000000000000", + "created_on": "2025-11-13T09:06:46.944628+00:00", + "updated_on": "2026-01-12T12:50:14.715896+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9044": "Savoryx Family Meal Drive", + "field_9045": [ + 3 + ], + "field_9046": "Grow penetration in family households", + "field_9047": "2025-10-21", + "field_9048": "2026-01-20", + "field_9049": "120000", + "field_9050": "Cross-platform promotions including in-store demos and digital recipe campaigns targeting busy parents.", + "field_9051": [ + 5 + ], + "field_9052": [ + 2 + ], + "field_9085": null + }, + { + "id": 6, + "order": "6.00000000000000000000", + "created_on": "2025-11-13T09:06:46.944680+00:00", + "updated_on": "2026-01-12T12:50:35.940211+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9044": "Aquaryth Pure Life Summer Hydration", + "field_9045": [ + 4 + ], + "field_9046": "Promote hydration awareness during summer", + "field_9047": "2025-06-10", + "field_9048": "2025-08-20", + "field_9049": "70000", + "field_9050": "Sampling events at public parks and social media education series to emphasize daily water intake.", + "field_9051": [ + 6 + ], + "field_9052": [ + 3 + ], + "field_9085": null + }, + { + "id": 7, + "order": "7.00000000000000000000", + "created_on": "2025-11-13T09:06:46.944749+00:00", + "updated_on": "2026-01-12T12:50:25.108177+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9044": "Podesso Ultimate Taste Experience", + "field_9045": [ + 5 + ], + "field_9046": "Drive sales of new premium capsules", + "field_9047": "2025-09-01", + "field_9048": "2025-10-28", + "field_9049": "150000", + "field_9050": "Exclusive pop-up tasting events in urban areas to showcase the latest Nespresso capsule innovations.", + "field_9051": [ + 7 + ], + "field_9052": [ + 2 + ], + "field_9085": null + } + ], + "data_sync": null, + "field_rules": [] + }, + { + "id": 968, + "name": "Experiments", + "order": 6, + "fields": [ + { + "id": 9053, + "type": "text", + "name": "Name", + "description": null, + "order": 0, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 9054, + "type": "long_text", + "name": "Hypothesis", + "description": null, + "order": 1, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "long_text_enable_rich_text": false + }, + { + "id": 9055, + "type": "link_row", + "name": "Primary KPI", + "description": null, + "order": 2, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 966, + "link_row_related_field_id": 9042, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 9056, + "type": "link_row", + "name": "Secondary KPI", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 966, + "link_row_related_field_id": 9043, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 9057, + "type": "date", + "name": "Start", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_format": "EU", + "date_include_time": false, + "date_time_format": "24", + "date_show_tzinfo": false, + "date_force_timezone": null + }, + { + "id": 9058, + "type": "date", + "name": "End", + "description": null, + "order": 5, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_format": "EU", + "date_include_time": false, + "date_time_format": "24", + "date_show_tzinfo": false, + "date_force_timezone": null + }, + { + "id": 9059, + "type": "link_row", + "name": "Owner", + "description": null, + "order": 6, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 963, + "link_row_related_field_id": 9033, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 9060, + "type": "single_select", + "name": "Status", + "description": null, + "order": 7, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "select_options": [ + { + "id": 3498, + "value": "Scheduled", + "color": "dark-blue", + "order": 0 + }, + { + "id": 3499, + "value": "In progress", + "color": "dark-green", + "order": 1 + }, + { + "id": 3500, + "value": "Completed", + "color": "dark-cyan", + "order": 2 + }, + { + "id": 3501, + "value": "Archived", + "color": "dark-brown", + "order": 3 + } + ], + "single_select_default": 3498 + }, + { + "id": 9061, + "type": "link_row", + "name": "Campaign", + "description": null, + "order": 8, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 967, + "link_row_related_field_id": 9051, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 9062, + "type": "link_row", + "name": "Variants", + "description": null, + "order": 9, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 969, + "link_row_related_field_id": 9067, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 9086, + "type": "rollup", + "name": "Market", + "description": null, + "order": 10, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": null, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": true, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "through_field_id": 9061, + "target_field_id": 9052, + "rollup_function": "min" + }, + { + "id": 9087, + "type": "rollup", + "name": "Brand", + "description": null, + "order": 11, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": null, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": true, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "through_field_id": 9061, + "target_field_id": 9045, + "rollup_function": "min" + }, + { + "id": 9088, + "type": "rollup", + "name": "Objective", + "description": null, + "order": 12, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": null, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": true, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "through_field_id": 9061, + "target_field_id": 9046, + "rollup_function": "min" + }, + { + "id": 9063, + "type": "single_select", + "name": "Priority", + "description": null, + "order": 13, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "select_options": [ + { + "id": 3502, + "value": "Low", + "color": "light-brown", + "order": 0 + }, + { + "id": 3503, + "value": "Medium", + "color": "brown", + "order": 1 + }, + { + "id": 3504, + "value": "High", + "color": "dark-brown", + "order": 2 + }, + { + "id": 3505, + "value": "Crucial", + "color": "darker-brown", + "order": 3 + } + ], + "single_select_default": null + }, + { + "id": 9089, + "type": "count", + "name": "Number of variants", + "description": null, + "order": 14, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": 0, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": false, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "through_field_id": 9062 + }, + { + "id": 9090, + "type": "formula", + "name": "Live variants count", + "description": null, + "order": 15, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": 0, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": false, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "formula": "sum(if(lookup('Variants', 'Build status') = 'Live', 1, 0))", + "formula_type": "number" + }, + { + "id": 9091, + "type": "formula", + "name": "Owner Email", + "description": null, + "order": 16, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": null, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": false, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "formula": "join(lookup('Owner', 'Email'), '')", + "formula_type": "text" + }, + { + "id": 9092, + "type": "formula", + "name": "Duration", + "description": null, + "order": 17, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": "h:mm", + "number_decimal_places": null, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": true, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "formula": "field('End') - field('Start')", + "formula_type": "duration" + } + ], + "views": [ + { + "id": 4420, + "type": "grid", + "name": "All experiments", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [ + { + "id": 2887, + "field_id": 9057, + "order": "DESC" + } + ], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 36700, + "field_id": 9053, + "width": 278, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36701, + "field_id": 9061, + "width": 200, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36702, + "field_id": 9088, + "width": 322, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36703, + "field_id": 9086, + "width": 154, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36704, + "field_id": 9087, + "width": 152, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36705, + "field_id": 9054, + "width": 368, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36706, + "field_id": 9055, + "width": 150, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36707, + "field_id": 9056, + "width": 200, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36708, + "field_id": 9060, + "width": 200, + "hidden": false, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36709, + "field_id": 9063, + "width": 200, + "hidden": false, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36710, + "field_id": 9057, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36711, + "field_id": 9058, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36712, + "field_id": 9059, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36713, + "field_id": 9062, + "width": 200, + "hidden": true, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36714, + "field_id": 9089, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36715, + "field_id": 9090, + "width": 200, + "hidden": true, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36716, + "field_id": 9091, + "width": 200, + "hidden": true, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36717, + "field_id": 9092, + "width": 200, + "hidden": true, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 4421, + "type": "grid", + "name": "Running experiments", + "order": 2, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 2650, + "field_id": 9060, + "type": "single_select_equal", + "value": "3499", + "group": null + } + ], + "filter_groups": [], + "sortings": [ + { + "id": 2888, + "field_id": 9057, + "order": "DESC" + } + ], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 36718, + "field_id": 9053, + "width": 258, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36719, + "field_id": 9061, + "width": 200, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36720, + "field_id": 9088, + "width": 322, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36721, + "field_id": 9086, + "width": 154, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36722, + "field_id": 9087, + "width": 152, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36723, + "field_id": 9054, + "width": 368, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36724, + "field_id": 9055, + "width": 150, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36725, + "field_id": 9056, + "width": 200, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36726, + "field_id": 9060, + "width": 200, + "hidden": false, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36727, + "field_id": 9063, + "width": 200, + "hidden": false, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36728, + "field_id": 9057, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36729, + "field_id": 9058, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36730, + "field_id": 9059, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36731, + "field_id": 9062, + "width": 200, + "hidden": true, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36732, + "field_id": 9089, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 4422, + "type": "grid", + "name": "All experiments grouped by campaign", + "order": 3, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [ + { + "id": 2889, + "field_id": 9057, + "order": "DESC" + } + ], + "group_bys": [ + { + "id": 483, + "field_id": 9061, + "order": "ASC" + } + ], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 36733, + "field_id": 9053, + "width": 258, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36734, + "field_id": 9061, + "width": 200, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36735, + "field_id": 9088, + "width": 322, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36736, + "field_id": 9086, + "width": 154, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36737, + "field_id": 9087, + "width": 152, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36738, + "field_id": 9054, + "width": 368, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36739, + "field_id": 9055, + "width": 150, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36740, + "field_id": 9056, + "width": 200, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36741, + "field_id": 9060, + "width": 200, + "hidden": false, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36742, + "field_id": 9063, + "width": 200, + "hidden": false, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36743, + "field_id": 9057, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36744, + "field_id": 9058, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36745, + "field_id": 9059, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36746, + "field_id": 9062, + "width": 200, + "hidden": true, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36747, + "field_id": 9089, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 4423, + "type": "grid", + "name": "All experiments grouped by market", + "order": 4, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [ + { + "id": 2890, + "field_id": 9057, + "order": "DESC" + } + ], + "group_bys": [ + { + "id": 484, + "field_id": 9086, + "order": "ASC" + } + ], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 36748, + "field_id": 9053, + "width": 258, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36749, + "field_id": 9061, + "width": 200, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36750, + "field_id": 9088, + "width": 322, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36751, + "field_id": 9086, + "width": 154, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36752, + "field_id": 9087, + "width": 152, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36753, + "field_id": 9054, + "width": 368, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36754, + "field_id": 9055, + "width": 150, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36755, + "field_id": 9056, + "width": 200, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36756, + "field_id": 9060, + "width": 200, + "hidden": false, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36757, + "field_id": 9063, + "width": 200, + "hidden": false, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36758, + "field_id": 9057, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36759, + "field_id": 9058, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36760, + "field_id": 9059, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36761, + "field_id": 9062, + "width": 200, + "hidden": true, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36762, + "field_id": 9089, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 4424, + "type": "grid", + "name": "All experiments grouped by brand", + "order": 5, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [ + { + "id": 2891, + "field_id": 9057, + "order": "DESC" + } + ], + "group_bys": [ + { + "id": 485, + "field_id": 9087, + "order": "ASC" + } + ], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 36763, + "field_id": 9053, + "width": 258, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36764, + "field_id": 9061, + "width": 200, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36765, + "field_id": 9088, + "width": 322, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36766, + "field_id": 9086, + "width": 154, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36767, + "field_id": 9087, + "width": 152, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36768, + "field_id": 9054, + "width": 368, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36769, + "field_id": 9055, + "width": 150, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36770, + "field_id": 9056, + "width": 200, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36771, + "field_id": 9060, + "width": 200, + "hidden": false, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36772, + "field_id": 9063, + "width": 200, + "hidden": false, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36773, + "field_id": 9057, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36774, + "field_id": 9058, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36775, + "field_id": 9059, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36776, + "field_id": 9062, + "width": 200, + "hidden": true, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36777, + "field_id": 9089, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 4425, + "type": "kanban", + "name": "All experiments stacked by status", + "order": 6, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "decorations": [], + "public": false, + "single_select_field_id": 9060, + "field_options": [ + { + "id": 5950, + "field_id": 9053, + "hidden": false, + "order": 32767 + }, + { + "id": 5951, + "field_id": 9054, + "hidden": false, + "order": 32767 + }, + { + "id": 5952, + "field_id": 9055, + "hidden": false, + "order": 32767 + }, + { + "id": 5953, + "field_id": 9056, + "hidden": false, + "order": 32767 + }, + { + "id": 5954, + "field_id": 9057, + "hidden": false, + "order": 32767 + }, + { + "id": 5955, + "field_id": 9058, + "hidden": false, + "order": 32767 + }, + { + "id": 5956, + "field_id": 9059, + "hidden": false, + "order": 32767 + }, + { + "id": 5957, + "field_id": 9060, + "hidden": true, + "order": 32767 + }, + { + "id": 5958, + "field_id": 9061, + "hidden": false, + "order": 32767 + }, + { + "id": 5959, + "field_id": 9062, + "hidden": true, + "order": 32767 + }, + { + "id": 5963, + "field_id": 9063, + "hidden": false, + "order": 32767 + }, + { + "id": 5960, + "field_id": 9086, + "hidden": false, + "order": 32767 + }, + { + "id": 5961, + "field_id": 9087, + "hidden": false, + "order": 32767 + }, + { + "id": 5962, + "field_id": 9088, + "hidden": true, + "order": 32767 + }, + { + "id": 5964, + "field_id": 9089, + "hidden": false, + "order": 32767 + } + ] + }, + { + "id": 4426, + "type": "kanban", + "name": "All experiments stacked by priority", + "order": 7, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "decorations": [], + "public": false, + "single_select_field_id": 9063, + "field_options": [ + { + "id": 5965, + "field_id": 9053, + "hidden": false, + "order": 32767 + }, + { + "id": 5966, + "field_id": 9054, + "hidden": false, + "order": 32767 + }, + { + "id": 5967, + "field_id": 9055, + "hidden": false, + "order": 32767 + }, + { + "id": 5968, + "field_id": 9056, + "hidden": false, + "order": 32767 + }, + { + "id": 5969, + "field_id": 9057, + "hidden": false, + "order": 32767 + }, + { + "id": 5970, + "field_id": 9058, + "hidden": false, + "order": 32767 + }, + { + "id": 5971, + "field_id": 9059, + "hidden": false, + "order": 32767 + }, + { + "id": 5972, + "field_id": 9060, + "hidden": false, + "order": 32767 + }, + { + "id": 5973, + "field_id": 9061, + "hidden": false, + "order": 32767 + }, + { + "id": 5974, + "field_id": 9062, + "hidden": true, + "order": 32767 + }, + { + "id": 5978, + "field_id": 9063, + "hidden": true, + "order": 32767 + }, + { + "id": 5975, + "field_id": 9086, + "hidden": false, + "order": 32767 + }, + { + "id": 5976, + "field_id": 9087, + "hidden": false, + "order": 32767 + }, + { + "id": 5977, + "field_id": 9088, + "hidden": true, + "order": 32767 + }, + { + "id": 5979, + "field_id": 9089, + "hidden": false, + "order": 32767 + } + ] + } + ], + "rows": [ + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2025-11-13T09:18:11.664235+00:00", + "updated_on": "2026-01-12T13:39:25.499515+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9053": "Brewvalle Instagram Stories Test", + "field_9054": "Short video stories will boost engagement with Gen Z coffee consumers.", + "field_9055": [ + 1 + ], + "field_9056": [ + 2 + ], + "field_9057": "2025-09-10", + "field_9058": "2025-11-20", + "field_9059": [ + 1 + ], + "field_9060": 3499, + "field_9061": [ + 3 + ], + "field_9062": [ + 3, + 4, + 5, + 6, + 7 + ], + "field_9086": null, + "field_9087": null, + "field_9088": null, + "field_9063": 3502, + "field_9089": null, + "field_9090": null, + "field_9091": null, + "field_9092": null + }, + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2025-11-13T09:18:11.664415+00:00", + "updated_on": "2026-01-12T12:51:23.959647+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9053": "Waforio Hashtag Participation Incentive", + "field_9054": "Offering prizes will double #HaveABreak challenge participation.", + "field_9055": [ + 2 + ], + "field_9056": [ + 4 + ], + "field_9057": "2025-07-01", + "field_9058": "2025-07-21", + "field_9059": [ + 2 + ], + "field_9060": 3500, + "field_9061": [ + 4 + ], + "field_9062": [ + 8, + 9, + 10, + 11, + 12 + ], + "field_9086": null, + "field_9087": null, + "field_9088": null, + "field_9063": 3503, + "field_9089": null, + "field_9090": null, + "field_9091": null, + "field_9092": null + }, + { + "id": 5, + "order": "5.00000000000000000000", + "created_on": "2025-11-13T09:18:11.664471+00:00", + "updated_on": "2026-01-12T12:52:45.036258+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9053": "Savoryx Recipe Video A/B", + "field_9054": "In-feed videos outperform static images for meal inspiration engagement.", + "field_9055": [ + 5 + ], + "field_9056": [ + 5 + ], + "field_9057": "2025-10-23", + "field_9058": "2025-10-14", + "field_9059": [ + 3 + ], + "field_9060": 3499, + "field_9061": [ + 5 + ], + "field_9062": [ + 13, + 14, + 15, + 16, + 17 + ], + "field_9086": null, + "field_9087": null, + "field_9088": null, + "field_9063": 3503, + "field_9089": null, + "field_9090": null, + "field_9091": null, + "field_9092": null + }, + { + "id": 6, + "order": "6.00000000000000000000", + "created_on": "2025-11-13T09:18:11.664520+00:00", + "updated_on": "2025-11-13T09:39:28.259714+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9053": "Pure Life Park Sampling Impact", + "field_9054": "On-site sampling will increase local store purchases within 2 weeks.", + "field_9055": [ + 3 + ], + "field_9056": [ + 2 + ], + "field_9057": "2025-06-10", + "field_9058": "2025-06-20", + "field_9059": [ + 4 + ], + "field_9060": 3500, + "field_9061": [ + 6 + ], + "field_9062": [ + 18, + 19, + 20, + 21, + 22 + ], + "field_9086": null, + "field_9087": null, + "field_9088": null, + "field_9063": 3504, + "field_9089": null, + "field_9090": null, + "field_9091": null, + "field_9092": null + }, + { + "id": 7, + "order": "7.00000000000000000000", + "created_on": "2025-11-13T09:18:11.664567+00:00", + "updated_on": "2026-01-12T12:51:18.370012+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9053": "Podesso Capsule Tasting Signup Lift", + "field_9054": "Offering exclusive tasting previews will drive more newsletter signups.", + "field_9055": [ + 2 + ], + "field_9056": [ + 1 + ], + "field_9057": "2025-09-01", + "field_9058": "2025-09-15", + "field_9059": [ + 5 + ], + "field_9060": 3498, + "field_9061": [ + 7 + ], + "field_9062": [ + 23, + 25, + 24, + 26, + 27 + ], + "field_9086": null, + "field_9087": null, + "field_9088": null, + "field_9063": 3505, + "field_9089": null, + "field_9090": null, + "field_9091": null, + "field_9092": null + } + ], + "data_sync": null, + "field_rules": [] + }, + { + "id": 969, + "name": "Variants", + "order": 7, + "fields": [ + { + "id": 9064, + "type": "text", + "name": "ID", + "description": null, + "order": 0, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 9065, + "type": "text", + "name": "Name", + "description": null, + "order": 1, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 9066, + "type": "single_select", + "name": "Build status", + "description": null, + "order": 2, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "select_options": [ + { + "id": 3506, + "value": "Idea", + "color": "light-blue", + "order": 0 + }, + { + "id": 3507, + "value": "In Design", + "color": "blue", + "order": 1 + }, + { + "id": 3508, + "value": "In Development", + "color": "blue", + "order": 2 + }, + { + "id": 3509, + "value": "QA", + "color": "dark-blue", + "order": 3 + }, + { + "id": 3510, + "value": "Live", + "color": "darker-blue", + "order": 4 + } + ], + "single_select_default": 3506 + }, + { + "id": 9067, + "type": "link_row", + "name": "Experiment", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 968, + "link_row_related_field_id": 9062, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 9093, + "type": "rollup", + "name": "Campaign", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": null, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": true, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "through_field_id": 9067, + "target_field_id": 9061, + "rollup_function": "min" + }, + { + "id": 9100, + "type": "rollup", + "name": "Market", + "description": null, + "order": 5, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": null, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": true, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "through_field_id": 9067, + "target_field_id": 9086, + "rollup_function": "min" + }, + { + "id": 9101, + "type": "rollup", + "name": "Brand", + "description": null, + "order": 6, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": null, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": true, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "through_field_id": 9067, + "target_field_id": 9087, + "rollup_function": "min" + }, + { + "id": 9102, + "type": "rollup", + "name": "Objective", + "description": null, + "order": 7, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": null, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": true, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "through_field_id": 9067, + "target_field_id": 9088, + "rollup_function": "min" + }, + { + "id": 9094, + "type": "rollup", + "name": "Hypothesis", + "description": null, + "order": 8, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": null, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": true, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "through_field_id": 9067, + "target_field_id": 9054, + "rollup_function": "min" + }, + { + "id": 9095, + "type": "rollup", + "name": "Primary KPI", + "description": null, + "order": 9, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": null, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": true, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "through_field_id": 9067, + "target_field_id": 9055, + "rollup_function": "min" + }, + { + "id": 9096, + "type": "rollup", + "name": "Secondary KPI", + "description": null, + "order": 10, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": null, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": true, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "through_field_id": 9067, + "target_field_id": 9055, + "rollup_function": "min" + }, + { + "id": 9068, + "type": "text", + "name": "Test focus", + "description": null, + "order": 11, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 9069, + "type": "text", + "name": "Test change", + "description": null, + "order": 12, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 9070, + "type": "long_text", + "name": "Design requirements", + "description": null, + "order": 13, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "long_text_enable_rich_text": false + }, + { + "id": 9071, + "type": "single_select", + "name": "Device", + "description": null, + "order": 14, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "select_options": [ + { + "id": 3511, + "value": "Laptop", + "color": "light-gray", + "order": 0 + }, + { + "id": 3512, + "value": "Phone", + "color": "gray", + "order": 1 + }, + { + "id": 3513, + "value": "Tablet", + "color": "gray", + "order": 2 + }, + { + "id": 3514, + "value": "TV", + "color": "dark-gray", + "order": 3 + } + ], + "single_select_default": null + }, + { + "id": 9072, + "type": "rating", + "name": "Potential (1-6)", + "description": null, + "order": 15, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "max_value": 6, + "color": "dark-orange", + "style": "star" + }, + { + "id": 9073, + "type": "single_select", + "name": "Above the fold (0-2)", + "description": null, + "order": 16, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "select_options": [ + { + "id": 3515, + "value": "0", + "color": "light-orange", + "order": 0 + }, + { + "id": 3516, + "value": "1", + "color": "light-blue", + "order": 1 + }, + { + "id": 3517, + "value": "2", + "color": "light-green", + "order": 2 + } + ], + "single_select_default": null + }, + { + "id": 9074, + "type": "rating", + "name": "Complexity (1-6)", + "description": null, + "order": 17, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "max_value": 6, + "color": "dark-orange", + "style": "star" + }, + { + "id": 9075, + "type": "single_select", + "name": "Based on previous test (0-2)", + "description": null, + "order": 18, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "select_options": [ + { + "id": 3518, + "value": "0", + "color": "light-orange", + "order": 0 + }, + { + "id": 3519, + "value": "1", + "color": "light-blue", + "order": 1 + }, + { + "id": 3520, + "value": "2", + "color": "light-green", + "order": 2 + } + ], + "single_select_default": null + }, + { + "id": 9076, + "type": "single_select", + "name": "Based on quantitative data (0-2)", + "description": null, + "order": 19, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "select_options": [ + { + "id": 3521, + "value": "0", + "color": "light-orange", + "order": 0 + }, + { + "id": 3522, + "value": "1", + "color": "light-blue", + "order": 1 + }, + { + "id": 3523, + "value": "2", + "color": "light-green", + "order": 2 + } + ], + "single_select_default": null + }, + { + "id": 9077, + "type": "single_select", + "name": "Based on qualitative data (0-2)", + "description": null, + "order": 20, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "select_options": [ + { + "id": 3524, + "value": "0", + "color": "light-orange", + "order": 0 + }, + { + "id": 3525, + "value": "1", + "color": "light-blue", + "order": 1 + }, + { + "id": 3526, + "value": "2", + "color": "light-green", + "order": 2 + } + ], + "single_select_default": null + }, + { + "id": 9078, + "type": "long_text", + "name": "Comments", + "description": null, + "order": 21, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "long_text_enable_rich_text": false + }, + { + "id": 9079, + "type": "file", + "name": "Images", + "description": null, + "order": 22, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [] + }, + { + "id": 9080, + "type": "file", + "name": "Document", + "description": null, + "order": 23, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [] + }, + { + "id": 9097, + "type": "formula", + "name": "Priority score", + "description": null, + "order": 24, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": 0, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": false, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "formula": "(field('Potential (1-6)') - field('Complexity (1-6)')) + 5", + "formula_type": "number" + }, + { + "id": 9098, + "type": "formula", + "name": "Confidence score", + "description": null, + "order": 25, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": 0, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": false, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "formula": "tonumber(totext(field('Above the fold (0-2)'))) + tonumber(totext(field('Based on previous test (0-2)'))) + tonumber(totext(field('Based on quantitative data (0-2)'))) + tonumber(totext(field('Based on qualitative data (0-2)')))", + "formula_type": "number" + }, + { + "id": 9103, + "type": "formula", + "name": "Opportunity index", + "description": null, + "order": 26, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": 2, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": false, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "formula": "(field('Potential (1-6)') * field('Confidence score')) / field('Complexity (1-6)')", + "formula_type": "number" + }, + { + "id": 9104, + "type": "formula", + "name": "Conclusion", + "description": null, + "order": 27, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_time_format": null, + "array_formula_type": null, + "duration_format": null, + "number_decimal_places": null, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "date_include_time": null, + "nullable": false, + "error": null, + "number_separator": "", + "number_suffix": "", + "date_show_tzinfo": null, + "formula": "if(field('Opportunity index') <= 10, '\ud83d\udd34 Low', if(field('Opportunity index') <= 20, '\ud83d\udfe0 Medium', if(field('Opportunity index') <= 35, '\ud83d\udfe1 High', '\ud83d\udfe2 Top Priority')))", + "formula_type": "text" + } + ], + "views": [ + { + "id": 4427, + "type": "grid", + "name": "All variants (all fields)", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [ + { + "id": 1093, + "type": "left_border_color", + "value_provider_type": "conditional_color", + "value_provider_conf": { + "colors": [ + { + "id": "88da000f-75a0-4cea-b610-91c08ad179f5", + "color": "darker-red", + "filters": [ + { + "id": "41ec2535-5e8f-4c5c-af82-38e1b0ba713e", + "type": "contains", + "field": 9104, + "group": null, + "value": "Low" + } + ], + "operator": "AND" + }, + { + "id": "4ecf56da-9a3f-439a-b691-dea6a83d4bcf", + "color": "darker-brown", + "filters": [ + { + "id": "5e578f5f-45bd-4fa7-bc98-8fb1c3ae4d91", + "type": "contains", + "field": 9104, + "group": null, + "value": "Medium" + } + ], + "operator": "AND" + }, + { + "id": "e40d0bbd-0761-4f1f-9d39-83315e16675a", + "color": "darker-yellow", + "filters": [ + { + "id": "160140f8-ea91-42db-b736-7bd814c2227c", + "type": "contains", + "field": 9104, + "group": null, + "value": "High" + } + ], + "operator": "AND" + }, + { + "id": "8282b080-2f6f-4019-954f-cdd989e4ff66", + "color": "darker-green", + "filters": [ + { + "id": "3f084fed-fdab-4c2f-8dae-c9e03da5ac3c", + "type": "contains", + "field": 9104, + "group": null, + "value": "Top" + } + ], + "operator": "AND" + } + ] + }, + "order": 1 + } + ], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 36778, + "field_id": 9064, + "width": 170, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36779, + "field_id": 9065, + "width": 204, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36780, + "field_id": 9066, + "width": 138, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36781, + "field_id": 9067, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36782, + "field_id": 9093, + "width": 281, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36783, + "field_id": 9102, + "width": 200, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36784, + "field_id": 9100, + "width": 200, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36785, + "field_id": 9101, + "width": 200, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36786, + "field_id": 9094, + "width": 475, + "hidden": false, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36787, + "field_id": 9095, + "width": 200, + "hidden": false, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36788, + "field_id": 9096, + "width": 200, + "hidden": false, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36789, + "field_id": 9068, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36790, + "field_id": 9069, + "width": 200, + "hidden": false, + "order": 12, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36791, + "field_id": 9070, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36792, + "field_id": 9071, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36793, + "field_id": 9072, + "width": 200, + "hidden": false, + "order": 16, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36794, + "field_id": 9073, + "width": 200, + "hidden": false, + "order": 17, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36795, + "field_id": 9074, + "width": 200, + "hidden": false, + "order": 18, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36796, + "field_id": 9075, + "width": 200, + "hidden": false, + "order": 19, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36797, + "field_id": 9076, + "width": 200, + "hidden": false, + "order": 20, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36798, + "field_id": 9077, + "width": 248, + "hidden": false, + "order": 21, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36799, + "field_id": 9078, + "width": 200, + "hidden": false, + "order": 22, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36800, + "field_id": 9079, + "width": 112, + "hidden": false, + "order": 23, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36801, + "field_id": 9080, + "width": 134, + "hidden": false, + "order": 24, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36802, + "field_id": 9097, + "width": 147, + "hidden": false, + "order": 25, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36803, + "field_id": 9098, + "width": 170, + "hidden": false, + "order": 26, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36804, + "field_id": 9103, + "width": 170, + "hidden": false, + "order": 27, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36805, + "field_id": 9104, + "width": 200, + "hidden": false, + "order": 28, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 4428, + "type": "grid", + "name": "All variants (rating fields)", + "order": 2, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [ + { + "id": 1094, + "type": "left_border_color", + "value_provider_type": "conditional_color", + "value_provider_conf": { + "colors": [ + { + "id": "88da000f-75a0-4cea-b610-91c08ad179f5", + "color": "darker-red", + "filters": [ + { + "id": "41ec2535-5e8f-4c5c-af82-38e1b0ba713e", + "type": "contains", + "field": 9104, + "group": null, + "value": "Low" + } + ], + "operator": "AND" + }, + { + "id": "4ecf56da-9a3f-439a-b691-dea6a83d4bcf", + "color": "darker-brown", + "filters": [ + { + "id": "5e578f5f-45bd-4fa7-bc98-8fb1c3ae4d91", + "type": "contains", + "field": 9104, + "group": null, + "value": "Medium" + } + ], + "operator": "AND" + }, + { + "id": "e40d0bbd-0761-4f1f-9d39-83315e16675a", + "color": "darker-yellow", + "filters": [ + { + "id": "160140f8-ea91-42db-b736-7bd814c2227c", + "type": "contains", + "field": 9104, + "group": null, + "value": "High" + } + ], + "operator": "AND" + }, + { + "id": "8282b080-2f6f-4019-954f-cdd989e4ff66", + "color": "darker-green", + "filters": [ + { + "id": "3f084fed-fdab-4c2f-8dae-c9e03da5ac3c", + "type": "contains", + "field": 9104, + "group": null, + "value": "Top" + } + ], + "operator": "AND" + } + ] + }, + "order": 1 + } + ], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 36806, + "field_id": 9064, + "width": 170, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36807, + "field_id": 9065, + "width": 204, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36808, + "field_id": 9066, + "width": 138, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36809, + "field_id": 9067, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36810, + "field_id": 9093, + "width": 281, + "hidden": true, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36811, + "field_id": 9102, + "width": 200, + "hidden": true, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36812, + "field_id": 9100, + "width": 200, + "hidden": true, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36813, + "field_id": 9101, + "width": 200, + "hidden": true, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36814, + "field_id": 9094, + "width": 475, + "hidden": true, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36815, + "field_id": 9095, + "width": 200, + "hidden": true, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36816, + "field_id": 9096, + "width": 200, + "hidden": true, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36817, + "field_id": 9068, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36818, + "field_id": 9069, + "width": 200, + "hidden": false, + "order": 12, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36819, + "field_id": 9070, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36820, + "field_id": 9071, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36821, + "field_id": 9072, + "width": 200, + "hidden": false, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36822, + "field_id": 9073, + "width": 200, + "hidden": false, + "order": 16, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36823, + "field_id": 9074, + "width": 200, + "hidden": false, + "order": 17, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36824, + "field_id": 9075, + "width": 200, + "hidden": false, + "order": 18, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36825, + "field_id": 9076, + "width": 200, + "hidden": false, + "order": 19, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36826, + "field_id": 9077, + "width": 248, + "hidden": false, + "order": 20, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36827, + "field_id": 9078, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36828, + "field_id": 9079, + "width": 200, + "hidden": true, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36829, + "field_id": 9080, + "width": 200, + "hidden": true, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36830, + "field_id": 9097, + "width": 147, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36831, + "field_id": 9098, + "width": 170, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36832, + "field_id": 9103, + "width": 170, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36833, + "field_id": 9104, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 4429, + "type": "grid", + "name": "Variants with complexity < 3", + "order": 3, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 2651, + "field_id": 9074, + "type": "lower_than", + "value": "3", + "group": null + } + ], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [ + { + "id": 1095, + "type": "left_border_color", + "value_provider_type": "conditional_color", + "value_provider_conf": { + "colors": [ + { + "id": "88da000f-75a0-4cea-b610-91c08ad179f5", + "color": "darker-red", + "filters": [ + { + "id": "41ec2535-5e8f-4c5c-af82-38e1b0ba713e", + "type": "contains", + "field": 9104, + "group": null, + "value": "Low" + } + ], + "operator": "AND" + }, + { + "id": "4ecf56da-9a3f-439a-b691-dea6a83d4bcf", + "color": "darker-brown", + "filters": [ + { + "id": "5e578f5f-45bd-4fa7-bc98-8fb1c3ae4d91", + "type": "contains", + "field": 9104, + "group": null, + "value": "Medium" + } + ], + "operator": "AND" + }, + { + "id": "e40d0bbd-0761-4f1f-9d39-83315e16675a", + "color": "darker-yellow", + "filters": [ + { + "id": "160140f8-ea91-42db-b736-7bd814c2227c", + "type": "contains", + "field": 9104, + "group": null, + "value": "High" + } + ], + "operator": "AND" + }, + { + "id": "8282b080-2f6f-4019-954f-cdd989e4ff66", + "color": "darker-green", + "filters": [ + { + "id": "3f084fed-fdab-4c2f-8dae-c9e03da5ac3c", + "type": "contains", + "field": 9104, + "group": null, + "value": "Top" + } + ], + "operator": "AND" + } + ] + }, + "order": 1 + } + ], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 36834, + "field_id": 9064, + "width": 170, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36835, + "field_id": 9065, + "width": 204, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36836, + "field_id": 9066, + "width": 138, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36837, + "field_id": 9067, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36838, + "field_id": 9093, + "width": 281, + "hidden": true, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36839, + "field_id": 9102, + "width": 200, + "hidden": true, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36840, + "field_id": 9100, + "width": 200, + "hidden": true, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36841, + "field_id": 9101, + "width": 200, + "hidden": true, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36842, + "field_id": 9094, + "width": 475, + "hidden": true, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36843, + "field_id": 9095, + "width": 200, + "hidden": true, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36844, + "field_id": 9096, + "width": 200, + "hidden": true, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36845, + "field_id": 9068, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36846, + "field_id": 9069, + "width": 200, + "hidden": false, + "order": 12, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36847, + "field_id": 9070, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36848, + "field_id": 9071, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36849, + "field_id": 9072, + "width": 200, + "hidden": false, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36850, + "field_id": 9073, + "width": 200, + "hidden": false, + "order": 16, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36851, + "field_id": 9074, + "width": 200, + "hidden": false, + "order": 17, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36852, + "field_id": 9075, + "width": 200, + "hidden": false, + "order": 18, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36853, + "field_id": 9076, + "width": 200, + "hidden": false, + "order": 19, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36854, + "field_id": 9077, + "width": 248, + "hidden": false, + "order": 20, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36855, + "field_id": 9078, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36856, + "field_id": 9079, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36857, + "field_id": 9080, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36858, + "field_id": 9097, + "width": 147, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36859, + "field_id": 9098, + "width": 170, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36860, + "field_id": 9103, + "width": 170, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36861, + "field_id": 9104, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 4430, + "type": "grid", + "name": "Variants with complexity >= 3", + "order": 4, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 2652, + "field_id": 9074, + "type": "higher_than_or_equal", + "value": "3", + "group": null + } + ], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [ + { + "id": 1096, + "type": "left_border_color", + "value_provider_type": "conditional_color", + "value_provider_conf": { + "colors": [ + { + "id": "88da000f-75a0-4cea-b610-91c08ad179f5", + "color": "darker-red", + "filters": [ + { + "id": "41ec2535-5e8f-4c5c-af82-38e1b0ba713e", + "type": "contains", + "field": 9104, + "group": null, + "value": "Low" + } + ], + "operator": "AND" + }, + { + "id": "4ecf56da-9a3f-439a-b691-dea6a83d4bcf", + "color": "darker-brown", + "filters": [ + { + "id": "5e578f5f-45bd-4fa7-bc98-8fb1c3ae4d91", + "type": "contains", + "field": 9104, + "group": null, + "value": "Medium" + } + ], + "operator": "AND" + }, + { + "id": "e40d0bbd-0761-4f1f-9d39-83315e16675a", + "color": "darker-yellow", + "filters": [ + { + "id": "160140f8-ea91-42db-b736-7bd814c2227c", + "type": "contains", + "field": 9104, + "group": null, + "value": "High" + } + ], + "operator": "AND" + }, + { + "id": "8282b080-2f6f-4019-954f-cdd989e4ff66", + "color": "darker-green", + "filters": [ + { + "id": "3f084fed-fdab-4c2f-8dae-c9e03da5ac3c", + "type": "contains", + "field": 9104, + "group": null, + "value": "Top" + } + ], + "operator": "AND" + } + ] + }, + "order": 1 + } + ], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 36862, + "field_id": 9064, + "width": 170, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36863, + "field_id": 9065, + "width": 204, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36864, + "field_id": 9066, + "width": 138, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36865, + "field_id": 9067, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36866, + "field_id": 9093, + "width": 281, + "hidden": true, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36867, + "field_id": 9102, + "width": 200, + "hidden": true, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36868, + "field_id": 9100, + "width": 200, + "hidden": true, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36869, + "field_id": 9101, + "width": 200, + "hidden": true, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36870, + "field_id": 9094, + "width": 475, + "hidden": true, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36871, + "field_id": 9095, + "width": 200, + "hidden": true, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36872, + "field_id": 9096, + "width": 200, + "hidden": true, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36873, + "field_id": 9068, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36874, + "field_id": 9069, + "width": 200, + "hidden": false, + "order": 12, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36875, + "field_id": 9070, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36876, + "field_id": 9071, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36877, + "field_id": 9072, + "width": 200, + "hidden": false, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36878, + "field_id": 9073, + "width": 200, + "hidden": false, + "order": 16, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36879, + "field_id": 9074, + "width": 200, + "hidden": false, + "order": 17, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36880, + "field_id": 9075, + "width": 200, + "hidden": false, + "order": 18, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36881, + "field_id": 9076, + "width": 200, + "hidden": false, + "order": 19, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36882, + "field_id": 9077, + "width": 248, + "hidden": false, + "order": 20, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36883, + "field_id": 9078, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36884, + "field_id": 9079, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36885, + "field_id": 9080, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36886, + "field_id": 9097, + "width": 147, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36887, + "field_id": 9098, + "width": 170, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36888, + "field_id": 9103, + "width": 170, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36889, + "field_id": 9104, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 4431, + "type": "grid", + "name": "Variants with potential < 3", + "order": 5, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 2653, + "field_id": 9072, + "type": "lower_than", + "value": "3", + "group": null + } + ], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [ + { + "id": 1097, + "type": "left_border_color", + "value_provider_type": "conditional_color", + "value_provider_conf": { + "colors": [ + { + "id": "88da000f-75a0-4cea-b610-91c08ad179f5", + "color": "darker-red", + "filters": [ + { + "id": "41ec2535-5e8f-4c5c-af82-38e1b0ba713e", + "type": "contains", + "field": 9104, + "group": null, + "value": "Low" + } + ], + "operator": "AND" + }, + { + "id": "4ecf56da-9a3f-439a-b691-dea6a83d4bcf", + "color": "darker-brown", + "filters": [ + { + "id": "5e578f5f-45bd-4fa7-bc98-8fb1c3ae4d91", + "type": "contains", + "field": 9104, + "group": null, + "value": "Medium" + } + ], + "operator": "AND" + }, + { + "id": "e40d0bbd-0761-4f1f-9d39-83315e16675a", + "color": "darker-yellow", + "filters": [ + { + "id": "160140f8-ea91-42db-b736-7bd814c2227c", + "type": "contains", + "field": 9104, + "group": null, + "value": "High" + } + ], + "operator": "AND" + }, + { + "id": "8282b080-2f6f-4019-954f-cdd989e4ff66", + "color": "darker-green", + "filters": [ + { + "id": "3f084fed-fdab-4c2f-8dae-c9e03da5ac3c", + "type": "contains", + "field": 9104, + "group": null, + "value": "Top" + } + ], + "operator": "AND" + } + ] + }, + "order": 1 + } + ], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 36890, + "field_id": 9064, + "width": 170, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36891, + "field_id": 9065, + "width": 204, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36892, + "field_id": 9066, + "width": 138, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36893, + "field_id": 9067, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36894, + "field_id": 9093, + "width": 281, + "hidden": true, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36895, + "field_id": 9102, + "width": 200, + "hidden": true, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36896, + "field_id": 9100, + "width": 200, + "hidden": true, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36897, + "field_id": 9101, + "width": 200, + "hidden": true, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36898, + "field_id": 9094, + "width": 475, + "hidden": true, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36899, + "field_id": 9095, + "width": 200, + "hidden": true, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36900, + "field_id": 9096, + "width": 200, + "hidden": true, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36901, + "field_id": 9068, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36902, + "field_id": 9069, + "width": 200, + "hidden": false, + "order": 12, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36903, + "field_id": 9070, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36904, + "field_id": 9071, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36905, + "field_id": 9072, + "width": 200, + "hidden": false, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36906, + "field_id": 9073, + "width": 200, + "hidden": false, + "order": 16, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36907, + "field_id": 9074, + "width": 200, + "hidden": false, + "order": 17, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36908, + "field_id": 9075, + "width": 200, + "hidden": false, + "order": 18, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36909, + "field_id": 9076, + "width": 200, + "hidden": false, + "order": 19, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36910, + "field_id": 9077, + "width": 248, + "hidden": false, + "order": 20, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36911, + "field_id": 9078, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36912, + "field_id": 9079, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36913, + "field_id": 9080, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36914, + "field_id": 9097, + "width": 147, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36915, + "field_id": 9098, + "width": 170, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36916, + "field_id": 9103, + "width": 170, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36917, + "field_id": 9104, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 4432, + "type": "grid", + "name": "Variants with potential >= 3", + "order": 6, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 2654, + "field_id": 9072, + "type": "higher_than_or_equal", + "value": "3", + "group": null + } + ], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [ + { + "id": 1098, + "type": "left_border_color", + "value_provider_type": "conditional_color", + "value_provider_conf": { + "colors": [ + { + "id": "88da000f-75a0-4cea-b610-91c08ad179f5", + "color": "darker-red", + "filters": [ + { + "id": "41ec2535-5e8f-4c5c-af82-38e1b0ba713e", + "type": "contains", + "field": 9104, + "group": null, + "value": "Low" + } + ], + "operator": "AND" + }, + { + "id": "4ecf56da-9a3f-439a-b691-dea6a83d4bcf", + "color": "darker-brown", + "filters": [ + { + "id": "5e578f5f-45bd-4fa7-bc98-8fb1c3ae4d91", + "type": "contains", + "field": 9104, + "group": null, + "value": "Medium" + } + ], + "operator": "AND" + }, + { + "id": "e40d0bbd-0761-4f1f-9d39-83315e16675a", + "color": "darker-yellow", + "filters": [ + { + "id": "160140f8-ea91-42db-b736-7bd814c2227c", + "type": "contains", + "field": 9104, + "group": null, + "value": "High" + } + ], + "operator": "AND" + }, + { + "id": "8282b080-2f6f-4019-954f-cdd989e4ff66", + "color": "darker-green", + "filters": [ + { + "id": "3f084fed-fdab-4c2f-8dae-c9e03da5ac3c", + "type": "contains", + "field": 9104, + "group": null, + "value": "Top" + } + ], + "operator": "AND" + } + ] + }, + "order": 1 + } + ], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 36918, + "field_id": 9064, + "width": 170, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36919, + "field_id": 9065, + "width": 204, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36920, + "field_id": 9066, + "width": 138, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36921, + "field_id": 9067, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36922, + "field_id": 9093, + "width": 281, + "hidden": true, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36923, + "field_id": 9102, + "width": 200, + "hidden": true, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36924, + "field_id": 9100, + "width": 200, + "hidden": true, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36925, + "field_id": 9101, + "width": 200, + "hidden": true, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36926, + "field_id": 9094, + "width": 475, + "hidden": true, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36927, + "field_id": 9095, + "width": 200, + "hidden": true, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36928, + "field_id": 9096, + "width": 200, + "hidden": true, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36929, + "field_id": 9068, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36930, + "field_id": 9069, + "width": 200, + "hidden": false, + "order": 12, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36931, + "field_id": 9070, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36932, + "field_id": 9071, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36933, + "field_id": 9072, + "width": 200, + "hidden": false, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36934, + "field_id": 9073, + "width": 200, + "hidden": false, + "order": 16, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36935, + "field_id": 9074, + "width": 200, + "hidden": false, + "order": 17, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36936, + "field_id": 9075, + "width": 200, + "hidden": false, + "order": 18, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36937, + "field_id": 9076, + "width": 200, + "hidden": false, + "order": 19, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36938, + "field_id": 9077, + "width": 248, + "hidden": false, + "order": 20, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36939, + "field_id": 9078, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36940, + "field_id": 9079, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36941, + "field_id": 9080, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36942, + "field_id": 9097, + "width": 147, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36943, + "field_id": 9098, + "width": 170, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36944, + "field_id": 9103, + "width": 170, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36945, + "field_id": 9104, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 4433, + "type": "grid", + "name": "Variants with top + high priority", + "order": 7, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "OR", + "filters_disabled": false, + "filters": [ + { + "id": 2655, + "field_id": 9104, + "type": "contains_word", + "value": "High", + "group": null + }, + { + "id": 2656, + "field_id": 9104, + "type": "contains_word", + "value": "Top", + "group": null + } + ], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [ + { + "id": 1099, + "type": "left_border_color", + "value_provider_type": "conditional_color", + "value_provider_conf": { + "colors": [ + { + "id": "88da000f-75a0-4cea-b610-91c08ad179f5", + "color": "darker-red", + "filters": [ + { + "id": "41ec2535-5e8f-4c5c-af82-38e1b0ba713e", + "type": "contains", + "field": 9104, + "group": null, + "value": "Low" + } + ], + "operator": "AND" + }, + { + "id": "4ecf56da-9a3f-439a-b691-dea6a83d4bcf", + "color": "darker-brown", + "filters": [ + { + "id": "5e578f5f-45bd-4fa7-bc98-8fb1c3ae4d91", + "type": "contains", + "field": 9104, + "group": null, + "value": "Medium" + } + ], + "operator": "AND" + }, + { + "id": "e40d0bbd-0761-4f1f-9d39-83315e16675a", + "color": "darker-yellow", + "filters": [ + { + "id": "160140f8-ea91-42db-b736-7bd814c2227c", + "type": "contains", + "field": 9104, + "group": null, + "value": "High" + } + ], + "operator": "AND" + }, + { + "id": "8282b080-2f6f-4019-954f-cdd989e4ff66", + "color": "darker-green", + "filters": [ + { + "id": "3f084fed-fdab-4c2f-8dae-c9e03da5ac3c", + "type": "contains", + "field": 9104, + "group": null, + "value": "Top" + } + ], + "operator": "AND" + } + ] + }, + "order": 1 + } + ], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 36946, + "field_id": 9064, + "width": 170, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36947, + "field_id": 9065, + "width": 204, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36948, + "field_id": 9066, + "width": 138, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36949, + "field_id": 9067, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36950, + "field_id": 9093, + "width": 281, + "hidden": true, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36951, + "field_id": 9102, + "width": 200, + "hidden": true, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36952, + "field_id": 9100, + "width": 200, + "hidden": true, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36953, + "field_id": 9101, + "width": 200, + "hidden": true, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36954, + "field_id": 9094, + "width": 475, + "hidden": true, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36955, + "field_id": 9095, + "width": 200, + "hidden": true, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36956, + "field_id": 9096, + "width": 200, + "hidden": true, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36957, + "field_id": 9068, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36958, + "field_id": 9069, + "width": 200, + "hidden": false, + "order": 12, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36959, + "field_id": 9070, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36960, + "field_id": 9071, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36961, + "field_id": 9072, + "width": 200, + "hidden": false, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36962, + "field_id": 9073, + "width": 200, + "hidden": false, + "order": 16, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36963, + "field_id": 9074, + "width": 200, + "hidden": false, + "order": 17, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36964, + "field_id": 9075, + "width": 200, + "hidden": false, + "order": 18, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36965, + "field_id": 9076, + "width": 200, + "hidden": false, + "order": 19, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36966, + "field_id": 9077, + "width": 248, + "hidden": false, + "order": 20, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36967, + "field_id": 9078, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36968, + "field_id": 9079, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36969, + "field_id": 9080, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36970, + "field_id": 9097, + "width": 147, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36971, + "field_id": 9098, + "width": 170, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36972, + "field_id": 9103, + "width": 170, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36973, + "field_id": 9104, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 4434, + "type": "grid", + "name": "Variants with top + high priority (all fields)", + "order": 8, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "OR", + "filters_disabled": false, + "filters": [ + { + "id": 2657, + "field_id": 9104, + "type": "contains_word", + "value": "High", + "group": null + }, + { + "id": 2658, + "field_id": 9104, + "type": "contains_word", + "value": "Top", + "group": null + } + ], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [ + { + "id": 1100, + "type": "left_border_color", + "value_provider_type": "conditional_color", + "value_provider_conf": { + "colors": [ + { + "id": "88da000f-75a0-4cea-b610-91c08ad179f5", + "color": "darker-red", + "filters": [ + { + "id": "41ec2535-5e8f-4c5c-af82-38e1b0ba713e", + "type": "contains", + "field": 9104, + "group": null, + "value": "Low" + } + ], + "operator": "AND" + }, + { + "id": "4ecf56da-9a3f-439a-b691-dea6a83d4bcf", + "color": "darker-brown", + "filters": [ + { + "id": "5e578f5f-45bd-4fa7-bc98-8fb1c3ae4d91", + "type": "contains", + "field": 9104, + "group": null, + "value": "Medium" + } + ], + "operator": "AND" + }, + { + "id": "e40d0bbd-0761-4f1f-9d39-83315e16675a", + "color": "darker-yellow", + "filters": [ + { + "id": "160140f8-ea91-42db-b736-7bd814c2227c", + "type": "contains", + "field": 9104, + "group": null, + "value": "High" + } + ], + "operator": "AND" + }, + { + "id": "8282b080-2f6f-4019-954f-cdd989e4ff66", + "color": "darker-green", + "filters": [ + { + "id": "3f084fed-fdab-4c2f-8dae-c9e03da5ac3c", + "type": "contains", + "field": 9104, + "group": null, + "value": "Top" + } + ], + "operator": "AND" + } + ] + }, + "order": 1 + } + ], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 36974, + "field_id": 9064, + "width": 170, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36975, + "field_id": 9065, + "width": 204, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36976, + "field_id": 9066, + "width": 138, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36977, + "field_id": 9067, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36978, + "field_id": 9093, + "width": 281, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36979, + "field_id": 9102, + "width": 200, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36980, + "field_id": 9100, + "width": 200, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36981, + "field_id": 9101, + "width": 200, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36982, + "field_id": 9094, + "width": 475, + "hidden": false, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36983, + "field_id": 9095, + "width": 200, + "hidden": false, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36984, + "field_id": 9096, + "width": 200, + "hidden": false, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36985, + "field_id": 9068, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36986, + "field_id": 9069, + "width": 200, + "hidden": false, + "order": 12, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36987, + "field_id": 9070, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36988, + "field_id": 9071, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36989, + "field_id": 9072, + "width": 200, + "hidden": false, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36990, + "field_id": 9073, + "width": 200, + "hidden": false, + "order": 16, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36991, + "field_id": 9074, + "width": 200, + "hidden": false, + "order": 17, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36992, + "field_id": 9075, + "width": 200, + "hidden": false, + "order": 18, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36993, + "field_id": 9076, + "width": 200, + "hidden": false, + "order": 19, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36994, + "field_id": 9077, + "width": 248, + "hidden": false, + "order": 20, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36995, + "field_id": 9078, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36996, + "field_id": 9079, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36997, + "field_id": 9080, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36998, + "field_id": 9097, + "width": 147, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 36999, + "field_id": 9098, + "width": 170, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37000, + "field_id": 9103, + "width": 170, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37001, + "field_id": 9104, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 4435, + "type": "grid", + "name": "All variants grouped by experiment", + "order": 9, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [ + { + "id": 486, + "field_id": 9067, + "order": "ASC" + } + ], + "decorations": [ + { + "id": 1101, + "type": "left_border_color", + "value_provider_type": "conditional_color", + "value_provider_conf": { + "colors": [ + { + "id": "88da000f-75a0-4cea-b610-91c08ad179f5", + "color": "darker-red", + "filters": [ + { + "id": "41ec2535-5e8f-4c5c-af82-38e1b0ba713e", + "type": "contains", + "field": 9104, + "group": null, + "value": "Low" + } + ], + "operator": "AND" + }, + { + "id": "4ecf56da-9a3f-439a-b691-dea6a83d4bcf", + "color": "darker-brown", + "filters": [ + { + "id": "5e578f5f-45bd-4fa7-bc98-8fb1c3ae4d91", + "type": "contains", + "field": 9104, + "group": null, + "value": "Medium" + } + ], + "operator": "AND" + }, + { + "id": "e40d0bbd-0761-4f1f-9d39-83315e16675a", + "color": "darker-yellow", + "filters": [ + { + "id": "160140f8-ea91-42db-b736-7bd814c2227c", + "type": "contains", + "field": 9104, + "group": null, + "value": "High" + } + ], + "operator": "AND" + }, + { + "id": "8282b080-2f6f-4019-954f-cdd989e4ff66", + "color": "darker-green", + "filters": [ + { + "id": "3f084fed-fdab-4c2f-8dae-c9e03da5ac3c", + "type": "contains", + "field": 9104, + "group": null, + "value": "Top" + } + ], + "operator": "AND" + } + ] + }, + "order": 1 + } + ], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 37002, + "field_id": 9064, + "width": 170, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37003, + "field_id": 9065, + "width": 204, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37004, + "field_id": 9066, + "width": 138, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37005, + "field_id": 9067, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37006, + "field_id": 9093, + "width": 281, + "hidden": true, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37007, + "field_id": 9102, + "width": 200, + "hidden": true, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37008, + "field_id": 9100, + "width": 200, + "hidden": true, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37009, + "field_id": 9101, + "width": 200, + "hidden": true, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37010, + "field_id": 9094, + "width": 475, + "hidden": true, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37011, + "field_id": 9095, + "width": 200, + "hidden": true, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37012, + "field_id": 9096, + "width": 200, + "hidden": true, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37013, + "field_id": 9068, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37014, + "field_id": 9069, + "width": 200, + "hidden": false, + "order": 12, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37015, + "field_id": 9070, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37016, + "field_id": 9071, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37017, + "field_id": 9072, + "width": 200, + "hidden": false, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37018, + "field_id": 9073, + "width": 200, + "hidden": false, + "order": 16, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37019, + "field_id": 9074, + "width": 200, + "hidden": false, + "order": 17, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37020, + "field_id": 9075, + "width": 200, + "hidden": false, + "order": 18, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37021, + "field_id": 9076, + "width": 200, + "hidden": false, + "order": 19, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37022, + "field_id": 9077, + "width": 248, + "hidden": false, + "order": 20, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37023, + "field_id": 9078, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37024, + "field_id": 9079, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37025, + "field_id": 9080, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37026, + "field_id": 9097, + "width": 147, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37027, + "field_id": 9098, + "width": 170, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37028, + "field_id": 9103, + "width": 170, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37029, + "field_id": 9104, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 4436, + "type": "grid", + "name": "All variants grouped by device", + "order": 10, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [ + { + "id": 487, + "field_id": 9071, + "order": "ASC" + } + ], + "decorations": [ + { + "id": 1102, + "type": "left_border_color", + "value_provider_type": "conditional_color", + "value_provider_conf": { + "colors": [ + { + "id": "88da000f-75a0-4cea-b610-91c08ad179f5", + "color": "darker-red", + "filters": [ + { + "id": "41ec2535-5e8f-4c5c-af82-38e1b0ba713e", + "type": "contains", + "field": 9104, + "group": null, + "value": "Low" + } + ], + "operator": "AND" + }, + { + "id": "4ecf56da-9a3f-439a-b691-dea6a83d4bcf", + "color": "darker-brown", + "filters": [ + { + "id": "5e578f5f-45bd-4fa7-bc98-8fb1c3ae4d91", + "type": "contains", + "field": 9104, + "group": null, + "value": "Medium" + } + ], + "operator": "AND" + }, + { + "id": "e40d0bbd-0761-4f1f-9d39-83315e16675a", + "color": "darker-yellow", + "filters": [ + { + "id": "160140f8-ea91-42db-b736-7bd814c2227c", + "type": "contains", + "field": 9104, + "group": null, + "value": "High" + } + ], + "operator": "AND" + }, + { + "id": "8282b080-2f6f-4019-954f-cdd989e4ff66", + "color": "darker-green", + "filters": [ + { + "id": "3f084fed-fdab-4c2f-8dae-c9e03da5ac3c", + "type": "contains", + "field": 9104, + "group": null, + "value": "Top" + } + ], + "operator": "AND" + } + ] + }, + "order": 1 + } + ], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 37030, + "field_id": 9064, + "width": 170, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37031, + "field_id": 9065, + "width": 204, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37032, + "field_id": 9066, + "width": 138, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37033, + "field_id": 9067, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37034, + "field_id": 9093, + "width": 281, + "hidden": true, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37035, + "field_id": 9102, + "width": 200, + "hidden": true, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37036, + "field_id": 9100, + "width": 200, + "hidden": true, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37037, + "field_id": 9101, + "width": 200, + "hidden": true, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37038, + "field_id": 9094, + "width": 475, + "hidden": true, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37039, + "field_id": 9095, + "width": 200, + "hidden": true, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37040, + "field_id": 9096, + "width": 200, + "hidden": true, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37041, + "field_id": 9068, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37042, + "field_id": 9069, + "width": 200, + "hidden": false, + "order": 12, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37043, + "field_id": 9070, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37044, + "field_id": 9071, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37045, + "field_id": 9072, + "width": 200, + "hidden": false, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37046, + "field_id": 9073, + "width": 200, + "hidden": false, + "order": 16, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37047, + "field_id": 9074, + "width": 200, + "hidden": false, + "order": 17, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37048, + "field_id": 9075, + "width": 200, + "hidden": false, + "order": 18, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37049, + "field_id": 9076, + "width": 200, + "hidden": false, + "order": 19, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37050, + "field_id": 9077, + "width": 248, + "hidden": false, + "order": 20, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37051, + "field_id": 9078, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37052, + "field_id": 9079, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37053, + "field_id": 9080, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37054, + "field_id": 9097, + "width": 147, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37055, + "field_id": 9098, + "width": 170, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37056, + "field_id": 9103, + "width": 170, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 37057, + "field_id": 9104, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 4437, + "type": "kanban", + "name": "All variants stacked by status", + "order": 11, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "decorations": [], + "public": false, + "single_select_field_id": 9066, + "field_options": [ + { + "id": 5980, + "field_id": 9064, + "hidden": false, + "order": 32767 + }, + { + "id": 5981, + "field_id": 9065, + "hidden": false, + "order": 32767 + }, + { + "id": 5982, + "field_id": 9066, + "hidden": true, + "order": 32767 + }, + { + "id": 5983, + "field_id": 9067, + "hidden": false, + "order": 32767 + }, + { + "id": 5991, + "field_id": 9068, + "hidden": false, + "order": 32767 + }, + { + "id": 5992, + "field_id": 9069, + "hidden": false, + "order": 32767 + }, + { + "id": 5993, + "field_id": 9070, + "hidden": false, + "order": 32767 + }, + { + "id": 5994, + "field_id": 9071, + "hidden": false, + "order": 32767 + }, + { + "id": 5995, + "field_id": 9072, + "hidden": true, + "order": 32767 + }, + { + "id": 5996, + "field_id": 9073, + "hidden": true, + "order": 32767 + }, + { + "id": 5997, + "field_id": 9074, + "hidden": true, + "order": 32767 + }, + { + "id": 5998, + "field_id": 9075, + "hidden": true, + "order": 32767 + }, + { + "id": 5999, + "field_id": 9076, + "hidden": true, + "order": 32767 + }, + { + "id": 6000, + "field_id": 9077, + "hidden": true, + "order": 32767 + }, + { + "id": 6001, + "field_id": 9078, + "hidden": true, + "order": 32767 + }, + { + "id": 6002, + "field_id": 9079, + "hidden": true, + "order": 32767 + }, + { + "id": 6003, + "field_id": 9080, + "hidden": true, + "order": 32767 + }, + { + "id": 5984, + "field_id": 9093, + "hidden": false, + "order": 32767 + }, + { + "id": 5988, + "field_id": 9094, + "hidden": false, + "order": 32767 + }, + { + "id": 5989, + "field_id": 9095, + "hidden": false, + "order": 32767 + }, + { + "id": 5990, + "field_id": 9096, + "hidden": false, + "order": 32767 + }, + { + "id": 6004, + "field_id": 9097, + "hidden": true, + "order": 32767 + }, + { + "id": 6005, + "field_id": 9098, + "hidden": true, + "order": 32767 + }, + { + "id": 5985, + "field_id": 9100, + "hidden": false, + "order": 32767 + }, + { + "id": 5986, + "field_id": 9101, + "hidden": false, + "order": 32767 + }, + { + "id": 5987, + "field_id": 9102, + "hidden": false, + "order": 32767 + }, + { + "id": 6006, + "field_id": 9103, + "hidden": true, + "order": 32767 + }, + { + "id": 6007, + "field_id": 9104, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 4438, + "type": "form", + "name": "Add new variant", + "order": 12, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "public": true, + "title": "Add a new experiment variant", + "description": "Fill out all the required information to submit a new variant for experimentation. Ensure each field is thoughtfully completed to maximize success in test management.", + "cover_image": null, + "logo_image": null, + "submit_text": "Submit", + "submit_action": "MESSAGE", + "submit_action_message": "", + "submit_action_redirect_url": "", + "field_options": [ + { + "id": 3291, + "field_id": 9064, + "name": "ID", + "description": "Unique identifier for the variant (typically auto-generated or filled by team lead).", + "enabled": true, + "required": false, + "order": 1, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3292, + "field_id": 9065, + "name": "Name", + "description": "Variant name (concise and descriptive). Example: 'Homepage Red Button'.", + "enabled": true, + "required": true, + "order": 2, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3293, + "field_id": 9066, + "name": "Build status", + "description": "Choose the current stage of this variant in the experimentation cycle.", + "enabled": true, + "required": true, + "order": 3, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3294, + "field_id": 9067, + "name": "Experiment", + "description": "Link to the parent experiment this variant belongs to.", + "enabled": true, + "required": true, + "order": 4, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3295, + "field_id": 9068, + "name": "Test focus", + "description": "Describe what this variant aims to test. Example: 'Impact of button color on conversion rate'.", + "enabled": true, + "required": true, + "order": 5, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3296, + "field_id": 9069, + "name": "Test change", + "description": "Summarize the primary change introduced in this variant. Example: 'Changed CTA text from Buy Now to Shop Today'.", + "enabled": true, + "required": true, + "order": 6, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3297, + "field_id": 9070, + "name": "Design requirements", + "description": "Detail any design specs, resources, or notes needed to build this variant (wireframes, copy, brand guidelines, etc).", + "enabled": true, + "required": false, + "order": 7, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3298, + "field_id": 9071, + "name": "Device", + "description": "Select the primary device this variant targets.", + "enabled": true, + "required": true, + "order": 8, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3299, + "field_id": 9072, + "name": "Potential (1-6)", + "description": "Estimate the potential impact of this variant (1=lowest, 6=highest). Consider expected business/user value.", + "enabled": false, + "required": true, + "order": 9, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3300, + "field_id": 9073, + "name": "Above the fold (0-2)", + "description": "How visible is the change? 0: Not visible without scrolling, 2: Immediately visible upon page load.", + "enabled": false, + "required": true, + "order": 10, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3301, + "field_id": 9074, + "name": "Complexity (1-6)", + "description": "Estimate build/test difficulty (1=simple, 6=complex).", + "enabled": false, + "required": true, + "order": 11, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3302, + "field_id": 9075, + "name": "Based on previous test (0-2)", + "description": "Does this idea build on previous learnings? 0: No, 2: Directly based on tested insight.", + "enabled": false, + "required": true, + "order": 12, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3303, + "field_id": 9076, + "name": "Based on quantitative data (0-2)", + "description": "Strength of data support. 0: No data, 2: Strong data-supported hypothesis.", + "enabled": false, + "required": true, + "order": 13, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3304, + "field_id": 9077, + "name": "Based on qualitative data (0-2)", + "description": "Insightfulness of qualitative research behind this idea. 0: No research, 2: Strong user research.", + "enabled": false, + "required": true, + "order": 14, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3305, + "field_id": 9078, + "name": "Comments", + "description": "Additional notes that do not fit in other fields.", + "enabled": false, + "required": false, + "order": 15, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3306, + "field_id": 9079, + "name": "Images", + "description": "Upload mockups, wireframes, or visual resources for this variant.", + "enabled": true, + "required": false, + "order": 16, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3307, + "field_id": 9080, + "name": "Document", + "description": "Attach supporting documents (design briefs, measurement plans, etc.)", + "enabled": true, + "required": false, + "order": 17, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3308, + "field_id": 9093, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3312, + "field_id": 9094, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3313, + "field_id": 9095, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3314, + "field_id": 9096, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3315, + "field_id": 9097, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3316, + "field_id": 9098, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3309, + "field_id": 9100, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3310, + "field_id": 9101, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3311, + "field_id": 9102, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3317, + "field_id": 9103, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3318, + "field_id": 9104, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + } + ] + }, + { + "id": 4439, + "type": "form", + "name": "Add new variant (all fields)", + "order": 13, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "public": false, + "title": "Add a new experiment variant", + "description": "Fill out all the required information to submit a new variant for experimentation. Ensure each field is thoughtfully completed to maximize success in test management.", + "cover_image": null, + "logo_image": null, + "submit_text": "Submit", + "submit_action": "MESSAGE", + "submit_action_message": "", + "submit_action_redirect_url": "", + "field_options": [ + { + "id": 3319, + "field_id": 9064, + "name": "ID", + "description": "Unique identifier for the variant (typically auto-generated or filled by team lead).", + "enabled": true, + "required": false, + "order": 1, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3320, + "field_id": 9065, + "name": "Name", + "description": "Variant name (concise and descriptive). Example: 'Homepage Red Button'.", + "enabled": true, + "required": true, + "order": 2, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3321, + "field_id": 9066, + "name": "Build status", + "description": "Choose the current stage of this variant in the experimentation cycle.", + "enabled": true, + "required": true, + "order": 3, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3322, + "field_id": 9067, + "name": "Experiment", + "description": "Link to the parent experiment this variant belongs to.", + "enabled": true, + "required": true, + "order": 4, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3323, + "field_id": 9068, + "name": "Test focus", + "description": "Describe what this variant aims to test. Example: 'Impact of button color on conversion rate'.", + "enabled": true, + "required": true, + "order": 5, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3324, + "field_id": 9069, + "name": "Test change", + "description": "Summarize the primary change introduced in this variant. Example: 'Changed CTA text from Buy Now to Shop Today'.", + "enabled": true, + "required": true, + "order": 6, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3325, + "field_id": 9070, + "name": "Design requirements", + "description": "Detail any design specs, resources, or notes needed to build this variant (wireframes, copy, brand guidelines, etc).", + "enabled": true, + "required": false, + "order": 7, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3326, + "field_id": 9071, + "name": "Device", + "description": "Select the primary device this variant targets.", + "enabled": true, + "required": true, + "order": 8, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3327, + "field_id": 9072, + "name": "Potential (1-6)", + "description": "Estimate the potential impact of this variant (1=lowest, 6=highest). Consider expected business/user value.", + "enabled": true, + "required": true, + "order": 9, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3328, + "field_id": 9073, + "name": "Above the fold (0-2)", + "description": "How visible is the change? 0: Not visible without scrolling, 2: Immediately visible upon page load.", + "enabled": true, + "required": true, + "order": 10, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3329, + "field_id": 9074, + "name": "Complexity (1-6)", + "description": "Estimate build/test difficulty (1=simple, 6=complex).", + "enabled": true, + "required": true, + "order": 11, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3330, + "field_id": 9075, + "name": "Based on previous test (0-2)", + "description": "Does this idea build on previous learnings? 0: No, 2: Directly based on tested insight.", + "enabled": true, + "required": true, + "order": 12, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3331, + "field_id": 9076, + "name": "Based on quantitative data (0-2)", + "description": "Strength of data support. 0: No data, 2: Strong data-supported hypothesis.", + "enabled": true, + "required": true, + "order": 13, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3332, + "field_id": 9077, + "name": "Based on qualitative data (0-2)", + "description": "Insightfulness of qualitative research behind this idea. 0: No research, 2: Strong user research.", + "enabled": true, + "required": true, + "order": 14, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3333, + "field_id": 9078, + "name": "Comments", + "description": "Additional notes that do not fit in other fields.", + "enabled": true, + "required": false, + "order": 15, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3334, + "field_id": 9079, + "name": "Images", + "description": "Upload mockups, wireframes, or visual resources for this variant.", + "enabled": true, + "required": false, + "order": 16, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3335, + "field_id": 9080, + "name": "Document", + "description": "Attach supporting documents (design briefs, measurement plans, etc.)", + "enabled": true, + "required": false, + "order": 17, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3336, + "field_id": 9093, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3340, + "field_id": 9094, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3341, + "field_id": 9095, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3342, + "field_id": 9096, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3343, + "field_id": 9097, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3344, + "field_id": 9098, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3337, + "field_id": 9100, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3338, + "field_id": 9101, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3339, + "field_id": 9102, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3345, + "field_id": 9103, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 3346, + "field_id": 9104, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + } + ] + }, + { + "id": 4440, + "type": "gallery", + "name": "Gallery: all variants", + "order": 14, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "decorations": [], + "public": false, + "card_cover_image_field_id": 9079, + "field_options": [ + { + "id": 3147, + "field_id": 9064, + "hidden": false, + "order": 32767 + }, + { + "id": 3148, + "field_id": 9065, + "hidden": false, + "order": 32767 + }, + { + "id": 3149, + "field_id": 9066, + "hidden": false, + "order": 32767 + }, + { + "id": 3150, + "field_id": 9067, + "hidden": true, + "order": 32767 + }, + { + "id": 3158, + "field_id": 9068, + "hidden": true, + "order": 32767 + }, + { + "id": 3159, + "field_id": 9069, + "hidden": true, + "order": 32767 + }, + { + "id": 3160, + "field_id": 9070, + "hidden": true, + "order": 32767 + }, + { + "id": 3161, + "field_id": 9071, + "hidden": true, + "order": 32767 + }, + { + "id": 3162, + "field_id": 9072, + "hidden": true, + "order": 32767 + }, + { + "id": 3163, + "field_id": 9073, + "hidden": true, + "order": 32767 + }, + { + "id": 3164, + "field_id": 9074, + "hidden": true, + "order": 32767 + }, + { + "id": 3165, + "field_id": 9075, + "hidden": true, + "order": 32767 + }, + { + "id": 3166, + "field_id": 9076, + "hidden": true, + "order": 32767 + }, + { + "id": 3167, + "field_id": 9077, + "hidden": true, + "order": 32767 + }, + { + "id": 3168, + "field_id": 9078, + "hidden": true, + "order": 32767 + }, + { + "id": 3169, + "field_id": 9079, + "hidden": true, + "order": 32767 + }, + { + "id": 3170, + "field_id": 9080, + "hidden": true, + "order": 32767 + }, + { + "id": 3151, + "field_id": 9093, + "hidden": true, + "order": 32767 + }, + { + "id": 3155, + "field_id": 9094, + "hidden": true, + "order": 32767 + }, + { + "id": 3156, + "field_id": 9095, + "hidden": true, + "order": 32767 + }, + { + "id": 3157, + "field_id": 9096, + "hidden": true, + "order": 32767 + }, + { + "id": 3171, + "field_id": 9097, + "hidden": true, + "order": 32767 + }, + { + "id": 3172, + "field_id": 9098, + "hidden": true, + "order": 32767 + }, + { + "id": 3152, + "field_id": 9100, + "hidden": true, + "order": 32767 + }, + { + "id": 3153, + "field_id": 9101, + "hidden": true, + "order": 32767 + }, + { + "id": 3154, + "field_id": 9102, + "hidden": true, + "order": 32767 + }, + { + "id": 3173, + "field_id": 9103, + "hidden": true, + "order": 32767 + }, + { + "id": 3174, + "field_id": 9104, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 4441, + "type": "gallery", + "name": "Gallery: high + top priority variants", + "order": 15, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "OR", + "filters_disabled": false, + "filters": [ + { + "id": 2659, + "field_id": 9104, + "type": "contains_word", + "value": "high", + "group": null + }, + { + "id": 2660, + "field_id": 9104, + "type": "contains_word", + "value": "top", + "group": null + } + ], + "filter_groups": [], + "sortings": [ + { + "id": 2892, + "field_id": 9104, + "order": "DESC" + } + ], + "decorations": [ + { + "id": 1103, + "type": "background_color", + "value_provider_type": "conditional_color", + "value_provider_conf": { + "colors": [ + { + "id": "629ba24d-a7a2-4a00-9aa5-591758dc03e1", + "color": "light-green", + "filters": [ + { + "id": "187c8485-09a1-4286-873c-45a3d54eb99d", + "type": "contains_word", + "field": 9104, + "group": null, + "value": "Top" + } + ], + "operator": "AND" + }, + { + "id": "dbfa677b-b443-46aa-abb8-a73c58f9e9a8", + "color": "light-yellow", + "filters": [ + { + "id": "44bceee6-dc61-46f0-adf1-dc66b8120458", + "type": "contains_word", + "field": 9104, + "group": null, + "value": "High" + } + ], + "operator": "AND" + } + ] + }, + "order": 1 + } + ], + "public": false, + "card_cover_image_field_id": 9079, + "field_options": [ + { + "id": 3175, + "field_id": 9064, + "hidden": false, + "order": 32767 + }, + { + "id": 3176, + "field_id": 9065, + "hidden": false, + "order": 32767 + }, + { + "id": 3177, + "field_id": 9066, + "hidden": false, + "order": 32767 + }, + { + "id": 3178, + "field_id": 9067, + "hidden": true, + "order": 32767 + }, + { + "id": 3186, + "field_id": 9068, + "hidden": true, + "order": 32767 + }, + { + "id": 3187, + "field_id": 9069, + "hidden": true, + "order": 32767 + }, + { + "id": 3188, + "field_id": 9070, + "hidden": true, + "order": 32767 + }, + { + "id": 3189, + "field_id": 9071, + "hidden": true, + "order": 32767 + }, + { + "id": 3190, + "field_id": 9072, + "hidden": true, + "order": 32767 + }, + { + "id": 3191, + "field_id": 9073, + "hidden": true, + "order": 32767 + }, + { + "id": 3192, + "field_id": 9074, + "hidden": true, + "order": 32767 + }, + { + "id": 3193, + "field_id": 9075, + "hidden": true, + "order": 32767 + }, + { + "id": 3194, + "field_id": 9076, + "hidden": true, + "order": 32767 + }, + { + "id": 3195, + "field_id": 9077, + "hidden": true, + "order": 32767 + }, + { + "id": 3196, + "field_id": 9078, + "hidden": true, + "order": 32767 + }, + { + "id": 3197, + "field_id": 9079, + "hidden": true, + "order": 32767 + }, + { + "id": 3198, + "field_id": 9080, + "hidden": true, + "order": 32767 + }, + { + "id": 3179, + "field_id": 9093, + "hidden": true, + "order": 32767 + }, + { + "id": 3183, + "field_id": 9094, + "hidden": true, + "order": 32767 + }, + { + "id": 3184, + "field_id": 9095, + "hidden": true, + "order": 32767 + }, + { + "id": 3185, + "field_id": 9096, + "hidden": true, + "order": 32767 + }, + { + "id": 3199, + "field_id": 9097, + "hidden": false, + "order": 32767 + }, + { + "id": 3200, + "field_id": 9098, + "hidden": false, + "order": 32767 + }, + { + "id": 3180, + "field_id": 9100, + "hidden": true, + "order": 32767 + }, + { + "id": 3181, + "field_id": 9101, + "hidden": true, + "order": 32767 + }, + { + "id": 3182, + "field_id": 9102, + "hidden": true, + "order": 32767 + }, + { + "id": 3201, + "field_id": 9103, + "hidden": false, + "order": 32767 + }, + { + "id": 3202, + "field_id": 9104, + "hidden": true, + "order": 32767 + } + ] + } + ], + "rows": [ + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2025-11-13T09:48:28.634139+00:00", + "updated_on": "2026-01-12T13:46:53.236304+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "INST-001-B", + "field_9065": "Lisa Finishes Work Early", + "field_9066": 3507, + "field_9067": [ + 3 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Ad copy test", + "field_9069": "Switch CTA position", + "field_9070": "Use brand font", + "field_9071": 3511, + "field_9072": 3, + "field_9073": 3516, + "field_9074": 3, + "field_9075": 3518, + "field_9076": 3523, + "field_9077": 3526, + "field_9078": "Focus on typography", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [ + { + "name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "visible_name": "invoice-demo.pdf", + "original_name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "size": 43627 + } + ], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 5, + "order": "5.00000000000000000000", + "created_on": "2025-11-13T09:48:28.634737+00:00", + "updated_on": "2026-01-12T13:46:55.122274+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "INST-001-C", + "field_9065": "Alicia's Quick Break", + "field_9066": 3508, + "field_9067": [ + 3 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Length of video", + "field_9069": "Reduce video length", + "field_9070": "Keep below 8 sec", + "field_9071": 3512, + "field_9072": 1, + "field_9073": 3517, + "field_9074": 2, + "field_9075": 3520, + "field_9076": 3522, + "field_9077": 3525, + "field_9078": "Testing short story engagement", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [ + { + "name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "visible_name": "invoice-demo.pdf", + "original_name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "size": 43627 + } + ], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 6, + "order": "6.00000000000000000000", + "created_on": "2025-11-13T09:48:28.635338+00:00", + "updated_on": "2026-01-12T13:46:55.524858+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "INST-001-D", + "field_9065": "Morning Espresso Pull", + "field_9066": 3509, + "field_9067": [ + 3 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Swipe gesture", + "field_9069": "Enable swipe up", + "field_9070": "Interactive gesture required", + "field_9071": 3513, + "field_9072": 6, + "field_9073": 3517, + "field_9074": 1, + "field_9075": 3520, + "field_9076": 3523, + "field_9077": 3526, + "field_9078": "Gesture control assessment", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [ + { + "name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "visible_name": "invoice-demo.pdf", + "original_name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "size": 43627 + } + ], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 3, + "order": "6.50000000000000000000", + "created_on": "2025-11-13T09:48:28.629709+00:00", + "updated_on": "2026-01-12T13:46:55.834861+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "INST-001-A", + "field_9065": "Bruno's Morning Coffee Story", + "field_9066": 3510, + "field_9067": [ + 3 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Focus on video engagement", + "field_9069": "Change background color", + "field_9070": "Must be mobile friendly", + "field_9071": 3512, + "field_9072": 5, + "field_9073": 3517, + "field_9074": 2, + "field_9075": 3519, + "field_9076": 3523, + "field_9077": 3525, + "field_9078": "Initial concept, testing colors", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [ + { + "name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "visible_name": "invoice-demo.pdf", + "original_name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "size": 43627 + } + ], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 7, + "order": "7.00000000000000000000", + "created_on": "2025-11-13T09:48:28.635762+00:00", + "updated_on": "2026-01-12T13:46:56.142619+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "INST-001-E", + "field_9065": "Jane's Coffee and Go", + "field_9066": 3510, + "field_9067": [ + 3 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Hashtag inclusion", + "field_9069": "Add Gen Z hashtag", + "field_9070": "Trending tags only", + "field_9071": 3512, + "field_9072": 5, + "field_9073": 3517, + "field_9074": 2, + "field_9075": 3520, + "field_9076": 3523, + "field_9077": 3526, + "field_9078": "Live variant, tagging impact", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [ + { + "name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "visible_name": "invoice-demo.pdf", + "original_name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "size": 43627 + } + ], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 8, + "order": "8.00000000000000000000", + "created_on": "2025-11-13T09:48:37.915106+00:00", + "updated_on": "2026-01-12T13:46:56.426407+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "WAF-PRIZE-A", + "field_9065": "Win Cinema Tickets", + "field_9066": 3506, + "field_9067": [ + 4 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Participation boost", + "field_9069": "Add leaderboard", + "field_9070": "Real-time update", + "field_9071": 3512, + "field_9072": 4, + "field_9073": 3517, + "field_9074": 3, + "field_9075": 3520, + "field_9076": 3522, + "field_9077": 3525, + "field_9078": "Gamification approach", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [ + { + "name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "visible_name": "invoice-demo.pdf", + "original_name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "size": 43627 + } + ], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 9, + "order": "9.00000000000000000000", + "created_on": "2025-11-13T09:48:37.915334+00:00", + "updated_on": "2026-01-12T13:46:56.717389+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "WAF-PRIZE-B", + "field_9065": "Chocolate Weekend Box", + "field_9066": 3507, + "field_9067": [ + 4 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Hashtag use", + "field_9069": "Feature trending hashtag", + "field_9070": "Dynamic update", + "field_9071": 3511, + "field_9072": 2, + "field_9073": 3515, + "field_9074": 4, + "field_9075": 3518, + "field_9076": 3523, + "field_9077": 3526, + "field_9078": "Topical tags for reach", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [ + { + "name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "visible_name": "invoice-demo.pdf", + "original_name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "size": 43627 + } + ], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 10, + "order": "10.00000000000000000000", + "created_on": "2025-11-13T09:48:37.915474+00:00", + "updated_on": "2026-01-12T13:46:57.099853+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "WAF-PRIZE-C", + "field_9065": "Cashback for Top Posts", + "field_9066": 3508, + "field_9067": [ + 4 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Reward size", + "field_9069": "Increase prizes", + "field_9070": "Highlight rewards", + "field_9071": 3513, + "field_9072": 3, + "field_9073": 3516, + "field_9074": 3, + "field_9075": 3519, + "field_9076": 3523, + "field_9077": 3525, + "field_9078": "Testing incentive uplift", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [ + { + "name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "visible_name": "invoice-demo.pdf", + "original_name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "size": 43627 + } + ], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 11, + "order": "11.00000000000000000000", + "created_on": "2025-11-13T09:48:37.915599+00:00", + "updated_on": "2026-01-12T13:46:57.419337+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "WAF-PRIZE-D", + "field_9065": "Merchandise Bundle", + "field_9066": 3509, + "field_9067": [ + 4 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "User reminders", + "field_9069": "Send push notifications", + "field_9070": "Opt-in notification", + "field_9071": 3512, + "field_9072": 4, + "field_9073": 3516, + "field_9074": 1, + "field_9075": 3520, + "field_9076": 3522, + "field_9077": 3526, + "field_9078": "Testing engagement nudge", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [ + { + "name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "visible_name": "invoice-demo.pdf", + "original_name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "size": 43627 + } + ], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 12, + "order": "12.00000000000000000000", + "created_on": "2025-11-13T09:48:37.915725+00:00", + "updated_on": "2026-01-12T13:46:57.759080+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "WAF-PRIZE-E", + "field_9065": "Meet the Mascot Event", + "field_9066": 3510, + "field_9067": [ + 4 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Visual callout", + "field_9069": "Highlight prize pool", + "field_9070": "Bold visuals", + "field_9071": 3514, + "field_9072": 4, + "field_9073": 3517, + "field_9074": 2, + "field_9075": 3519, + "field_9076": 3522, + "field_9077": 3526, + "field_9078": "Live variant qualities", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [ + { + "name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "visible_name": "invoice-demo.pdf", + "original_name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "size": 43627 + } + ], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 13, + "order": "13.00000000000000000000", + "created_on": "2025-11-13T09:48:48.412125+00:00", + "updated_on": "2026-01-12T13:46:58.046559+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "SAV-RECIPE-1", + "field_9065": "One-Pot Veggie Dinner", + "field_9066": 3506, + "field_9067": [ + 5 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Image vs. Video", + "field_9069": "Replace image with video", + "field_9070": "Quick recipe section", + "field_9071": 3511, + "field_9072": 3, + "field_9073": 3516, + "field_9074": 4, + "field_9075": 3518, + "field_9076": 3523, + "field_9077": 3525, + "field_9078": "Testing static to video", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 14, + "order": "14.00000000000000000000", + "created_on": "2025-11-13T09:48:48.412367+00:00", + "updated_on": "2026-01-12T13:46:58.366255+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "SAV-RECIPE-2", + "field_9065": "Changing the title", + "field_9066": 3507, + "field_9067": [ + 5 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Video placement", + "field_9069": "Move video above text", + "field_9070": "Highlight visuals", + "field_9071": 3512, + "field_9072": 2, + "field_9073": 3517, + "field_9074": 1, + "field_9075": 3520, + "field_9076": 3522, + "field_9077": 3526, + "field_9078": "Above the fold effect", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 15, + "order": "15.00000000000000000000", + "created_on": "2025-11-13T09:48:48.412467+00:00", + "updated_on": "2026-01-12T13:46:58.735448+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "SAV-RECIPE-3", + "field_9065": "Mushroom Risotto Express", + "field_9066": 3508, + "field_9067": [ + 5 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Call-to-action", + "field_9069": "Change CTA color", + "field_9070": "Red accent", + "field_9071": 3513, + "field_9072": 5, + "field_9073": 3517, + "field_9074": 2, + "field_9075": 3520, + "field_9076": 3522, + "field_9077": 3526, + "field_9078": "CTA prominence", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [ + { + "name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "visible_name": "invoice-demo.pdf", + "original_name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "size": 43627 + } + ], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 16, + "order": "16.00000000000000000000", + "created_on": "2025-11-13T09:48:48.412560+00:00", + "updated_on": "2026-01-12T13:46:59.049083+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "SAV-RECIPE-4", + "field_9065": "Sunday Breakfast Pancakes", + "field_9066": 3509, + "field_9067": [ + 5 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Step-by-step layout", + "field_9069": "Add numbered steps", + "field_9070": "Step indicator", + "field_9071": 3511, + "field_9072": 4, + "field_9073": 3515, + "field_9074": 3, + "field_9075": 3518, + "field_9076": 3523, + "field_9077": 3526, + "field_9078": "Step clarity test", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 17, + "order": "17.00000000000000000000", + "created_on": "2025-11-13T09:48:48.412652+00:00", + "updated_on": "2026-01-12T13:46:59.353132+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "SAV-RECIPE-5", + "field_9065": "Garden Salad w/ Herbs", + "field_9066": 3510, + "field_9067": [ + 5 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Shareable option", + "field_9069": "Enable social share", + "field_9070": "Social icons visible", + "field_9071": 3512, + "field_9072": 3, + "field_9073": 3516, + "field_9074": 4, + "field_9075": 3520, + "field_9076": 3523, + "field_9077": 3525, + "field_9078": "Live variant, social sharing", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [ + { + "name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "visible_name": "invoice-demo.pdf", + "original_name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "size": 43627 + } + ], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 18, + "order": "18.00000000000000000000", + "created_on": "2025-11-13T09:48:57.113323+00:00", + "updated_on": "2026-01-12T13:46:59.718745+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "PURELIFE-SAMPLE-A", + "field_9065": "Weekday Busy Path", + "field_9066": 3506, + "field_9067": [ + 6 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Sampling location", + "field_9069": "Change park area", + "field_9070": "High traffic", + "field_9071": 3513, + "field_9072": 1, + "field_9073": 3517, + "field_9074": 3, + "field_9075": 3519, + "field_9076": 3523, + "field_9077": 3525, + "field_9078": "Evaluate location effectiveness", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 19, + "order": "19.00000000000000000000", + "created_on": "2025-11-13T09:48:57.113497+00:00", + "updated_on": "2026-01-12T13:47:00.072998+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "PURELIFE-SAMPLE-B", + "field_9065": "Family Picnic Corner", + "field_9066": 3507, + "field_9067": [ + 6 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Incentive type", + "field_9069": "Add coupon", + "field_9070": "Easy to redeem", + "field_9071": 3512, + "field_9072": 4, + "field_9073": 3515, + "field_9074": 2, + "field_9075": 3518, + "field_9076": 3522, + "field_9077": 3526, + "field_9078": "Coupon impact trial", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 20, + "order": "20.00000000000000000000", + "created_on": "2025-11-13T09:48:57.113614+00:00", + "updated_on": "2026-01-12T13:47:00.882174+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "PURELIFE-SAMPLE-C", + "field_9065": "Dog Walkers Gathering", + "field_9066": 3508, + "field_9067": [ + 6 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Branding", + "field_9069": "Update bottle design", + "field_9070": "Eco-friendly label", + "field_9071": 3511, + "field_9072": 6, + "field_9073": 3516, + "field_9074": 1, + "field_9075": 3520, + "field_9076": 3523, + "field_9077": 3526, + "field_9078": "Bottle redesign test", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [ + { + "name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "visible_name": "invoice-demo.pdf", + "original_name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "size": 43627 + } + ], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 21, + "order": "21.00000000000000000000", + "created_on": "2025-11-13T09:48:57.113728+00:00", + "updated_on": "2026-01-12T13:47:01.173246+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "PURELIFE-SAMPLE-D", + "field_9065": "Sunset Yoga Spot", + "field_9066": 3509, + "field_9067": [ + 6 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Sampling time", + "field_9069": "Evening slot", + "field_9070": "Lighting optimized", + "field_9071": 3512, + "field_9072": 2, + "field_9073": 3517, + "field_9074": 3, + "field_9075": 3519, + "field_9076": 3523, + "field_9077": 3524, + "field_9078": "Testing sampling time effect", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 22, + "order": "22.00000000000000000000", + "created_on": "2025-11-13T09:48:57.113834+00:00", + "updated_on": "2026-01-12T13:47:02.814241+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "PURELIFE-SAMPLE-E", + "field_9065": "Health Expo Booth", + "field_9066": 3510, + "field_9067": [ + 6 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Promotion visibility", + "field_9069": "Large signage", + "field_9070": "High contrast signs", + "field_9071": 3514, + "field_9072": 6, + "field_9073": 3516, + "field_9074": 2, + "field_9075": 3520, + "field_9076": 3522, + "field_9077": 3525, + "field_9078": "Live - measuring promotion recall", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [ + { + "name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "visible_name": "invoice-demo.pdf", + "original_name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "size": 43627 + } + ], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 23, + "order": "23.00000000000000000000", + "created_on": "2025-11-13T09:49:09.355797+00:00", + "updated_on": "2026-01-12T13:47:02.427700+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "POD-TASTE-A", + "field_9065": "Luca's First Espresso Shot", + "field_9066": 3506, + "field_9067": [ + 7 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Signup prompt", + "field_9069": "Popup on landing", + "field_9070": "Minimalist design", + "field_9071": 3511, + "field_9072": 3, + "field_9073": 3517, + "field_9074": 5, + "field_9075": 3519, + "field_9076": 3521, + "field_9077": 3526, + "field_9078": "First approach on-site", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [ + { + "name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "visible_name": "invoice-demo.pdf", + "original_name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "size": 43627 + } + ], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 24, + "order": "24.00000000000000000000", + "created_on": "2025-11-13T09:49:09.356012+00:00", + "updated_on": "2026-01-12T13:47:03.360422+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "POD-TASTE-B", + "field_9065": "Afternoon Treats Signup", + "field_9066": 3507, + "field_9067": [ + 7 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Offer wording", + "field_9069": "Alter signup description", + "field_9070": "Friendly copy", + "field_9071": 3512, + "field_9072": 4, + "field_9073": 3516, + "field_9074": 4, + "field_9075": 3518, + "field_9076": 3523, + "field_9077": 3525, + "field_9078": "A/B copywriting", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [ + { + "name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "visible_name": "invoice-demo.pdf", + "original_name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "size": 43627 + } + ], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 25, + "order": "25.00000000000000000000", + "created_on": "2025-11-13T09:49:09.356187+00:00", + "updated_on": "2026-01-12T13:47:03.804113+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "POD-TASTE-C", + "field_9065": "Sampling with Emma", + "field_9066": 3508, + "field_9067": [ + 7 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Form fields", + "field_9069": "Reduce required info", + "field_9070": "Easy subscribe", + "field_9071": 3513, + "field_9072": 3, + "field_9073": 3515, + "field_9074": 2, + "field_9075": 3520, + "field_9076": 3522, + "field_9077": 3525, + "field_9078": "Lower friction", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 26, + "order": "26.00000000000000000000", + "created_on": "2025-11-13T09:49:09.356417+00:00", + "updated_on": "2026-01-12T13:47:04.138898+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "POD-TASTE-D", + "field_9065": "Saturday Latte Rush", + "field_9066": 3509, + "field_9067": [ + 7 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "CTA color", + "field_9069": "Use green button", + "field_9070": "Button visibility", + "field_9071": 3512, + "field_9072": 4, + "field_9073": 3517, + "field_9074": 3, + "field_9075": 3519, + "field_9076": 3523, + "field_9077": 3524, + "field_9078": "Final visual variant", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + }, + { + "id": 27, + "order": "27.00000000000000000000", + "created_on": "2025-11-13T09:49:09.356581+00:00", + "updated_on": "2026-01-12T13:47:04.445002+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_9064": "POD-TASTE-E", + "field_9065": "Anna's Thank You Page", + "field_9066": 3510, + "field_9067": [ + 7 + ], + "field_9093": null, + "field_9100": null, + "field_9101": null, + "field_9102": null, + "field_9094": null, + "field_9095": null, + "field_9096": null, + "field_9068": "Confirmation", + "field_9069": "Show thank you screen", + "field_9070": "On-brand, quick feedback", + "field_9071": 3512, + "field_9072": 3, + "field_9073": 3516, + "field_9074": 1, + "field_9075": 3520, + "field_9076": 3523, + "field_9077": 3526, + "field_9078": "Tracking conversion impact", + "field_9079": [ + { + "name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "visible_name": "default-menu-image-placeholder.png", + "original_name": "kLmQ5KJWfparh8KbSZP2QAiB87B0N45Y_b205508285d9eb121496336022cba718c5b4cf7af39c838a80466ead70beea4d.png", + "size": 17269 + } + ], + "field_9080": [ + { + "name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "visible_name": "invoice-demo.pdf", + "original_name": "eftxFRWti1XfuP5Qw0i43GxmtKaZ6MED_c2de358a0974f9b047aed8e457def7d4b1b39170f44819ec3152b42db787d72e.pdf", + "size": 43627 + } + ], + "field_9097": null, + "field_9098": null, + "field_9103": null, + "field_9104": null + } + ], + "data_sync": null, + "field_rules": [] + } + ] + }, + { + "pages": [ + { + "id": 552, + "name": "__shared__", + "order": 1, + "path": "__shared__", + "path_params": [], + "query_params": [], + "shared": true, + "elements": [ + { + "id": 8021, + "order": "1.00000000000000000000", + "type": "header", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "share_type": "all", + "pages": [] + }, + { + "id": 8022, + "order": "1.00000000000000000000", + "type": "image", + "parent_element_id": 8021, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "image_source_type": "upload", + "image_file_id": { + "name": "pIKNEgRMlzutiqDmQDe9H5u7gAGeyA3K_19f8e94b815ae7415c8032ce03c362000e30184a0bbc4b098debe63087394231.png", + "original_name": "application-header.png" + }, + "image_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "alt_text": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 8145, + "order": "2.00000000000000000000", + "type": "menu", + "parent_element_id": 8021, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "orientation": "horizontal", + "alignment": "left", + "menu_items": [ + { + "id": 376, + "variant": "link", + "type": "link", + "menu_item_order": 0, + "uid": "40fe79be-1edd-417f-a48b-3bdab8359027", + "name": "Home", + "navigation_type": "page", + "navigate_to_page_id": 553, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 377, + "variant": "link", + "type": "separator", + "menu_item_order": 1, + "uid": "06202849-18b5-429e-b652-890a3f5c1d11", + "name": "Page", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + } + ] + } + ], + "data_sources": [], + "workflow_actions": [], + "visibility": "all", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 553, + "name": "Homepage", + "order": 1, + "path": "/", + "path_params": [], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 8023, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Running experiments'" + }, + "level": 1 + }, + { + "id": 8024, + "order": "2.00000000000000000000", + "type": "table", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 982, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "e74bc8b2-78fd-4c9e-a690-9fbedb876541", + "name": "Name", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 554, + "page_parameters": [ + { + "name": "experiment_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9053')" + }, + "variant": "link" + } + }, + { + "uid": "49999ef9-3564-4063-bef4-e2992542987e", + "name": "Start", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9057')" + } + } + }, + { + "uid": "a497d83a-a3ce-42fb-b420-110f90b9dfdc", + "name": "End", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9058')" + } + } + }, + { + "uid": "ca9a1c41-b727-435c-9d57-3fc23fcf1094", + "name": "Owner", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9059.*.value')" + } + } + }, + { + "uid": "ec6ef536-f8a0-4b37-ad0e-9cb28cb6b28e", + "name": "Campaign", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9061.*.value')" + } + } + }, + { + "uid": "9264b03f-d003-4345-880e-0b043ab03e5c", + "name": "Market", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9086')" + } + } + }, + { + "uid": "553aabeb-b77d-4dec-b9cb-6ea8ee199acf", + "name": "Priority", + "type": "tags", + "styles": {}, + "config": { + "values": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9063.value')" + }, + "colors_is_formula": true, + "colors": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9063.color')" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + } + ], + "data_sources": [ + { + "id": 982, + "name": "Running experiments", + "order": "1.00000000000000000000", + "service": { + "id": 1755, + "integration_id": 184, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 968, + "view_id": 4421, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "default_result_count": 20 + } + } + ], + "workflow_actions": [], + "visibility": "all", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 554, + "name": "Variant overview", + "order": 2, + "path": "/variant-overview/:experiment_id", + "path_params": [ + { + "name": "experiment_id", + "type": "numeric" + } + ], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 8026, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.983.field_9053'),' (',get('data_source.983.field_9089'),' variants)')" + }, + "level": 1 + }, + { + "id": 8027, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 8025, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'CAMPAIGN'" + }, + "format": "plain" + }, + { + "id": 8028, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 8025, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'HYPOTHESIS'" + }, + "format": "plain" + }, + { + "id": 8025, + "order": "2.00000000000000000000", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 1, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 1, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 20, + "alignment": "top" + }, + { + "id": 8029, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 8025, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.983.field_9061.0.value')" + }, + "format": "plain" + }, + { + "id": 8030, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 8025, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.983.field_9054')" + }, + "format": "plain" + }, + { + "id": 8031, + "order": "3.00000000000000000000", + "type": "text", + "parent_element_id": 8025, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'OBJECTIVE'" + }, + "format": "plain" + }, + { + "id": 8032, + "order": "3.00000000000000000000", + "type": "text", + "parent_element_id": 8025, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'PRIMARY KPI / SECONDARY KPI'" + }, + "format": "plain" + }, + { + "id": 8033, + "order": "3.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 30, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Existing variants (summary)'" + }, + "level": 2 + }, + { + "id": 8034, + "order": "4.00000000000000000000", + "type": "text", + "parent_element_id": 8025, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.983.field_9088')" + }, + "format": "plain" + }, + { + "id": 8035, + "order": "4.00000000000000000000", + "type": "text", + "parent_element_id": 8025, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.983.field_9055.0.value'),' / ',get('data_source.983.field_9056.0.value'))" + }, + "format": "plain" + }, + { + "id": 8036, + "order": "4.00000000000000000000", + "type": "table", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 984, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "566dedbc-7be7-4257-beae-574dbc7aece9", + "name": "ID", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 555, + "page_parameters": [ + { + "name": "experiment_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.experiment_id')" + } + }, + { + "name": "variant_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9064')" + }, + "variant": "link" + } + }, + { + "uid": "8f1adc06-7301-4442-871d-087475a38d00", + "name": "Name", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9065')" + } + } + }, + { + "uid": "2cf8363d-d1b2-43b2-8fd5-9f0793efda77", + "name": "Status", + "type": "tags", + "styles": {}, + "config": { + "values": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9066.value')" + }, + "colors_is_formula": true, + "colors": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9066.color')" + } + } + }, + { + "uid": "3ee14fd2-17cd-45ca-97a9-900d10ee00c6", + "name": "Test focus", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9068')" + } + } + }, + { + "uid": "9cf33f05-0382-4775-99d5-c6a2669419e6", + "name": "Test change", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9069')" + } + } + }, + { + "uid": "683d45e8-fac4-4f6e-b175-304118dad78b", + "name": "Priority", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9097')" + } + } + }, + { + "uid": "39ac2113-1739-486c-9696-2ef9b12fc8c7", + "name": "Confidence", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9098')" + } + } + }, + { + "uid": "a9b6ee6a-fded-4a47-a6f5-351e27a806d6", + "name": "Opportunity", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9103')" + } + } + }, + { + "uid": "02627e70-0eaa-4241-ba31-6be363578720", + "name": "Conclusion", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9104')" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + }, + { + "id": 8037, + "order": "5.00000000000000000000", + "type": "text", + "parent_element_id": 8025, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'MARKET'" + }, + "format": "plain" + }, + { + "id": 8038, + "order": "5.00000000000000000000", + "type": "text", + "parent_element_id": 8025, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'START / END'" + }, + "format": "plain" + }, + { + "id": 8039, + "order": "6.00000000000000000000", + "type": "text", + "parent_element_id": 8025, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.983.field_9086')" + }, + "format": "plain" + }, + { + "id": 8040, + "order": "6.00000000000000000000", + "type": "text", + "parent_element_id": 8025, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.983.field_9057'),' / ',get('data_source.983.field_9058'))" + }, + "format": "plain" + }, + { + "id": 8041, + "order": "7.00000000000000000000", + "type": "text", + "parent_element_id": 8025, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'BRAND'" + }, + "format": "plain" + }, + { + "id": 8042, + "order": "7.00000000000000000000", + "type": "text", + "parent_element_id": 8025, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'OWNER'" + }, + "format": "plain" + }, + { + "id": 8043, + "order": "8.00000000000000000000", + "type": "text", + "parent_element_id": 8025, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.983.field_9087')" + }, + "format": "plain" + }, + { + "id": 8044, + "order": "8.00000000000000000000", + "type": "text", + "parent_element_id": 8025, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.983.field_9059.0.value')" + }, + "format": "plain" + }, + { + "id": 8045, + "order": "9.00000000000000000000", + "type": "text", + "parent_element_id": 8025, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'PRIORITY'" + }, + "format": "plain" + }, + { + "id": 8046, + "order": "10.00000000000000000000", + "type": "text", + "parent_element_id": 8025, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.983.field_9059.0.value'),get('data_source.983.field_9063.value'))" + }, + "format": "plain" + } + ], + "data_sources": [ + { + "id": 983, + "name": "Get experiment", + "order": "1.00000000000000000000", + "service": { + "id": 1756, + "integration_id": 184, + "type": "local_baserow_get_row", + "sample_data": null, + "table_id": 968, + "view_id": null, + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.experiment_id')" + } + } + }, + { + "id": 984, + "name": "Related variants", + "order": "2.00000000000000000000", + "service": { + "id": 1757, + "integration_id": 184, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 969, + "view_id": 4427, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 9067, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.experiment_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + } + ], + "workflow_actions": [], + "visibility": "all", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 555, + "name": "Variant details", + "order": 3, + "path": "/variant-details/:experiment_id/:variant_id", + "path_params": [ + { + "name": "experiment_id", + "type": "numeric" + }, + { + "name": "variant_id", + "type": "numeric" + } + ], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 8056, + "order": "0.50000000000000000000", + "type": "link", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 554, + "page_parameters": [ + { + "name": "experiment_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.experiment_id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'<- Back to overview'" + }, + "variant": "link" + }, + { + "id": 8050, + "order": "1.00000000000000000000", + "type": "rating_input", + "parent_element_id": 8049, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Potential'" + }, + "required": true, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.985.field_9072')" + }, + "max_value": 6, + "color": "primary", + "rating_style": "star" + }, + { + "id": 8057, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.985.field_9065'),' (',get('data_source.985.field_9064'),')')" + }, + "level": 1 + }, + { + "id": 8058, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 8047, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'STATUS'" + }, + "format": "plain" + }, + { + "id": 8059, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 8047, + "place_in_container": "2", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'PRIORITY SCORE'" + }, + "format": "plain" + }, + { + "id": 8060, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 8047, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'DOCUMENT'" + }, + "format": "plain" + }, + { + "id": 8061, + "order": "1.00000000000000000000", + "type": "image", + "parent_element_id": 8048, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "image": {} + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "image_source_type": "url", + "image_file_id": null, + "image_url": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.url')" + }, + "alt_text": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 8047, + "order": "2.00000000000000000000", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 1, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 1, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 3, + "column_gap": 20, + "alignment": "top" + }, + { + "id": 8051, + "order": "2.00000000000000000000", + "type": "rating_input", + "parent_element_id": 8049, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Complexity'" + }, + "required": true, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.985.field_9072'),get('data_source.985.field_9074'))" + }, + "max_value": 6, + "color": "primary", + "rating_style": "star" + }, + { + "id": 8062, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 8047, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.985.field_9066.value')" + }, + "format": "plain" + }, + { + "id": 8063, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 8047, + "place_in_container": "2", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 24, + "body_text_color": "secondary" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 10, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.985.field_9097')" + }, + "format": "plain" + }, + { + "id": 8064, + "order": "2.00000000000000000000", + "type": "link", + "parent_element_id": 8047, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "custom", + "navigate_to_page_id": null, + "page_parameters": [], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.985.field_9080.0.url')" + }, + "target": "blank", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.985.field_9080.0.visible_name')" + }, + "variant": "link" + }, + { + "id": 8065, + "order": "2.33333333333333348136", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Images'" + }, + "level": 2 + }, + { + "id": 8048, + "order": "2.50000000000000000000", + "type": "repeat", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 985, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": "field_9079", + "property_options": [], + "orientation": "horizontal", + "items_per_row": { + "tablet": 2, + "desktop": 5, + "smartphone": 2 + }, + "horizontal_gap": 30, + "vertical_gap": 0 + }, + { + "id": 8052, + "order": "3.00000000000000000000", + "type": "choice", + "parent_element_id": 8049, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Above the fold'" + }, + "required": true, + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.985.field_9073.id')" + }, + "options": [], + "multiple": false, + "show_as_dropdown": false, + "option_type": "formulas", + "formula_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source_context.985.field_9073.*.id')" + }, + "formula_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source_context.985.field_9073.*.value')" + } + }, + { + "id": 8066, + "order": "3.00000000000000000000", + "type": "text", + "parent_element_id": 8047, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'TEST FOCUS'" + }, + "format": "plain" + }, + { + "id": 8067, + "order": "3.00000000000000000000", + "type": "text", + "parent_element_id": 8047, + "place_in_container": "2", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'CONFIDENCE SCORE'" + }, + "format": "plain" + }, + { + "id": 8068, + "order": "3.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Update variant scores'" + }, + "level": 2 + }, + { + "id": 8049, + "order": "3.33333333333333348136", + "type": "form_container", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_alignment": "center", + "button_horizontal_padding": 36 + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 20, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 20, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 50, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "zuHhf", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "small", + "style_width_child": "normal", + "submit_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Update variant scores'" + }, + "reset_initial_values_post_submission": false + }, + { + "id": 8069, + "order": "3.50000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 30, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Other variants'" + }, + "level": 2 + }, + { + "id": 8053, + "order": "4.00000000000000000000", + "type": "choice", + "parent_element_id": 8049, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Based on previous tests'" + }, + "required": true, + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.985.field_9075.id')" + }, + "options": [], + "multiple": false, + "show_as_dropdown": false, + "option_type": "formulas", + "formula_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source_context.985.field_9075.*.id')" + }, + "formula_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source_context.985.field_9075.*.value')" + } + }, + { + "id": 8070, + "order": "4.00000000000000000000", + "type": "text", + "parent_element_id": 8047, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.985.field_9068')" + }, + "format": "plain" + }, + { + "id": 8071, + "order": "4.00000000000000000000", + "type": "table", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 986, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "44d2b11b-9ad7-41d9-8863-c4f219de5861", + "name": "ID", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 555, + "page_parameters": [ + { + "name": "experiment_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.experiment_id')" + } + }, + { + "name": "variant_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9064')" + }, + "variant": "link" + } + }, + { + "uid": "baba143b-ba8e-426c-8e26-0e2ad7bec0f2", + "name": "Name", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9065')" + } + } + }, + { + "uid": "638f3966-eec1-4aa9-8523-72106b012dd8", + "name": "Conclusion", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9104')" + } + } + }, + { + "uid": "aa580312-40c6-464d-8a1f-184b357e73a2", + "name": "Potential", + "type": "rating", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9072')" + }, + "color": "primary", + "rating_style": "star", + "max_value": 5 + } + }, + { + "uid": "6ae0c644-7597-450e-afc5-fac568e73335", + "name": "Complexity", + "type": "rating", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9074')" + }, + "color": "primary", + "rating_style": "star", + "max_value": 5 + } + }, + { + "uid": "a950aaea-0a79-4453-a708-979a46857a66", + "name": "Above fold", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9073.value')" + } + } + }, + { + "uid": "1195f1b6-419f-40b6-86aa-0220cea57d2b", + "name": "Previous test", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9075.value')" + } + } + }, + { + "uid": "cb63d48a-7fa9-4812-9ed4-da3160f79634", + "name": "Quantitative", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9076.value')" + } + } + }, + { + "uid": "0533c122-6ce8-4af0-b2b4-d84f9dd09443", + "name": "Qualitative", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_9077.value')" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + }, + { + "id": 8072, + "order": "4.00000000000000000000", + "type": "text", + "parent_element_id": 8047, + "place_in_container": "2", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 24, + "body_text_color": "secondary" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 10, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.985.field_9098')" + }, + "format": "plain" + }, + { + "id": 8054, + "order": "5.00000000000000000000", + "type": "choice", + "parent_element_id": 8049, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Based on quantitative data'" + }, + "required": true, + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.985.field_9076.id')" + }, + "options": [], + "multiple": false, + "show_as_dropdown": false, + "option_type": "formulas", + "formula_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source_context.985.field_9076.*.id')" + }, + "formula_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source_context.985.field_9076.*.value')" + } + }, + { + "id": 8073, + "order": "5.00000000000000000000", + "type": "text", + "parent_element_id": 8047, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'TEST CHANGE'" + }, + "format": "plain" + }, + { + "id": 8074, + "order": "5.00000000000000000000", + "type": "text", + "parent_element_id": 8047, + "place_in_container": "2", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'OPPORTUNITY INDEX'" + }, + "format": "plain" + }, + { + "id": 8055, + "order": "6.00000000000000000000", + "type": "choice", + "parent_element_id": 8049, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Based on qualitative data'" + }, + "required": true, + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.985.field_9077.id')" + }, + "options": [], + "multiple": false, + "show_as_dropdown": false, + "option_type": "formulas", + "formula_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source_context.985.field_9077.*.id')" + }, + "formula_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source_context.985.field_9077.*.value')" + } + }, + { + "id": 8075, + "order": "6.00000000000000000000", + "type": "text", + "parent_element_id": 8047, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.985.field_9069')" + }, + "format": "plain" + }, + { + "id": 8076, + "order": "6.00000000000000000000", + "type": "text", + "parent_element_id": 8047, + "place_in_container": "2", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 24, + "body_text_color": "secondary" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 10, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.985.field_9104'),' (',get('data_source.985.field_9103'),')')" + }, + "format": "plain" + }, + { + "id": 8077, + "order": "7.00000000000000000000", + "type": "text", + "parent_element_id": 8047, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'DESIGN REQUIREMENTS '" + }, + "format": "plain" + }, + { + "id": 8078, + "order": "8.00000000000000000000", + "type": "text", + "parent_element_id": 8047, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.985.field_9070')" + }, + "format": "plain" + }, + { + "id": 8079, + "order": "9.00000000000000000000", + "type": "text", + "parent_element_id": 8047, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'DEVICE'" + }, + "format": "plain" + }, + { + "id": 8080, + "order": "10.00000000000000000000", + "type": "text", + "parent_element_id": 8047, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.985.field_9071.value')" + }, + "format": "plain" + }, + { + "id": 8081, + "order": "11.00000000000000000000", + "type": "text", + "parent_element_id": 8047, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'COMMENTS'" + }, + "format": "plain" + }, + { + "id": 8082, + "order": "12.00000000000000000000", + "type": "text", + "parent_element_id": 8047, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.985.field_9078')" + }, + "format": "plain" + } + ], + "data_sources": [ + { + "id": 985, + "name": "Get variant", + "order": "1.00000000000000000000", + "service": { + "id": 1758, + "integration_id": 184, + "type": "local_baserow_get_row", + "sample_data": null, + "table_id": 969, + "view_id": null, + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.variant_id')" + } + } + }, + { + "id": 986, + "name": "Related variants", + "order": "2.00000000000000000000", + "service": { + "id": 1759, + "integration_id": 184, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 969, + "view_id": 4427, + "sortings": [ + { + "field_id": 9103, + "order_by": "DESC" + } + ], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 9067, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.experiment_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + } + ], + "workflow_actions": [ + { + "id": 1001, + "type": "update_row", + "order": 1, + "page_id": 555, + "element_id": 8049, + "event": "submit", + "service": { + "id": 1760, + "integration_id": 184, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 969, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.985.id')" + }, + "field_mappings": [ + { + "field_id": 9064, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 9065, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 9066, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 9067, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 9068, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 9069, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 9070, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 9071, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 9072, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.8050')" + }, + "enabled": true + }, + { + "field_id": 9073, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.8052')" + }, + "enabled": true + }, + { + "field_id": 9074, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.8051')" + }, + "enabled": true + }, + { + "field_id": 9075, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.8053')" + }, + "enabled": true + }, + { + "field_id": 9076, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.8054')" + }, + "enabled": true + }, + { + "field_id": 9077, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.8055')" + }, + "enabled": true + }, + { + "field_id": 9080, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 9079, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 9078, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + } + ] + } + }, + { + "id": 1002, + "type": "refresh_data_source", + "order": 2, + "page_id": 555, + "element_id": 8049, + "event": "submit", + "data_source_id": 985 + }, + { + "id": 1003, + "type": "refresh_data_source", + "order": 3, + "page_id": 555, + "element_id": 8049, + "event": "submit", + "data_source_id": 986 + } + ], + "visibility": "all", + "role_type": "allow_all", + "roles": [] + } + ], + "integrations": [ + { + "id": 184, + "name": "Local Baserow", + "order": "1.00000000000000000000", + "type": "local_baserow", + "authorized_user": null + } + ], + "theme": { + "primary_color": "#63513d", + "secondary_color": "#037cba", + "border_color": "#d7d8d9ff", + "main_success_color": "#12D452", + "main_warning_color": "#FCC74A", + "main_error_color": "#FF5A4A", + "custom_colors": [ + { + "name": "White", + "color": "#ffffff", + "value": "7r1vQ" + }, + { + "name": "Text", + "color": "#34220d", + "value": "whWF9" + }, + { + "name": "Background", + "color": "#f6f5f4", + "value": "zuHhf" + } + ], + "body_font_family": "arial", + "body_font_size": 14, + "body_font_weight": "regular", + "body_text_color": "whWF9", + "body_text_alignment": "left", + "heading_1_font_family": "inter", + "heading_1_font_size": 24, + "heading_1_font_weight": "bold", + "heading_1_text_color": "primary", + "heading_1_text_alignment": "left", + "heading_1_text_decoration": [ + false, + false, + false, + false + ], + "heading_2_font_family": "inter", + "heading_2_font_size": 20, + "heading_2_font_weight": "semi-bold", + "heading_2_text_color": "secondary", + "heading_2_text_alignment": "left", + "heading_2_text_decoration": [ + false, + false, + false, + false + ], + "heading_3_font_family": "inter", + "heading_3_font_size": 16, + "heading_3_font_weight": "medium", + "heading_3_text_color": "whWF9", + "heading_3_text_alignment": "left", + "heading_3_text_decoration": [ + false, + false, + false, + false + ], + "heading_4_font_family": "inter", + "heading_4_font_size": 16, + "heading_4_font_weight": "medium", + "heading_4_text_color": "whWF9", + "heading_4_text_alignment": "left", + "heading_4_text_decoration": [ + false, + false, + false, + false + ], + "heading_5_font_family": "inter", + "heading_5_font_size": 14, + "heading_5_font_weight": "regular", + "heading_5_text_color": "whWF9", + "heading_5_text_alignment": "left", + "heading_5_text_decoration": [ + false, + false, + false, + false + ], + "heading_6_font_family": "inter", + "heading_6_font_size": 14, + "heading_6_font_weight": "regular", + "heading_6_text_color": "whWF9", + "heading_6_text_alignment": "left", + "heading_6_text_decoration": [ + false, + false, + false, + false + ], + "button_font_family": "inter", + "button_font_size": 13, + "button_font_weight": "regular", + "button_alignment": "left", + "button_text_alignment": "center", + "button_width": "auto", + "button_background_color": "secondary", + "button_text_color": "#ffffffff", + "button_border_color": "border", + "button_border_size": 0, + "button_border_radius": 4, + "button_vertical_padding": 12, + "button_horizontal_padding": 12, + "button_hover_background_color": "#96baf6ff", + "button_hover_text_color": "#ffffffff", + "button_hover_border_color": "border", + "button_active_background_color": "#4783db", + "button_active_text_color": "#ffffffff", + "button_active_border_color": "#275d9f", + "image_alignment": "left", + "image_max_width": 100, + "image_max_height": null, + "image_border_radius": 0, + "image_constraint": "contain", + "page_background_color": "#ffffffff", + "page_background_file_id": null, + "page_background_mode": "tile", + "label_font_family": "inter", + "label_text_color": "primary", + "label_font_size": 13, + "label_font_weight": "medium", + "input_font_family": "inter", + "input_font_size": 13, + "input_font_weight": "regular", + "input_text_color": "whWF9", + "input_background_color": "#FFFFFFFF", + "input_border_color": "border", + "input_border_size": 1, + "input_border_radius": 0, + "input_vertical_padding": 8, + "input_horizontal_padding": 12, + "table_border_color": "border", + "table_border_size": 0, + "table_border_radius": 0, + "table_header_background_color": "zuHhf", + "table_header_text_color": "primary", + "table_header_font_size": 13, + "table_header_font_weight": "semi-bold", + "table_header_font_family": "inter", + "table_header_text_alignment": "left", + "table_cell_background_color": "transparent", + "table_cell_alternate_background_color": "transparent", + "table_cell_alignment": "left", + "table_cell_vertical_padding": 10, + "table_cell_horizontal_padding": 20, + "table_vertical_separator_color": "border", + "table_vertical_separator_size": 0, + "table_horizontal_separator_color": "border", + "table_horizontal_separator_size": 1, + "link_font_family": "inter", + "link_font_size": 13, + "link_font_weight": "regular", + "link_text_alignment": "left", + "link_text_color": "secondary", + "link_hover_text_color": "#96baf6ff", + "link_active_text_color": "#275d9f", + "link_default_text_decoration": [ + true, + false, + false, + false + ], + "link_hover_text_decoration": [ + true, + false, + false, + false + ], + "link_active_text_decoration": [ + true, + false, + false, + false + ] + }, + "user_sources": [], + "favicon_file": null, + "login_page": null, + "id": 345, + "name": "Rating variants", + "order": 3, + "type": "builder", + "scripts": [], + "custom_code": { + "css": "@import url('https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap');\n\n.ab-heading{\n font-family: 'Open sans'\n}", + "js": "" + } + } + ] +} \ No newline at end of file diff --git a/backend/templates/ab-testing.zip b/backend/templates/ab-testing.zip new file mode 100644 index 0000000000..0e464946d1 Binary files /dev/null and b/backend/templates/ab-testing.zip differ diff --git a/backend/templates/inspections-compliance.json b/backend/templates/inspections-compliance.json index 1ba9c57688..f4abf129de 100644 --- a/backend/templates/inspections-compliance.json +++ b/backend/templates/inspections-compliance.json @@ -1,5 +1,5 @@ { - "baserow_template_version": 1, + "baserow_template_version": 2, "name": "Inspections & Compliance", "icon": "iconoir-shield-eye", "keywords": [ @@ -16,21 +16,21 @@ "Business Operations", "Business Continuity" ], - "open_application": 2166, - "export": [ + "open_application": 320, + "export":[ { - "id": 2166, + "id": 320, "name": "Inspections & Compliance", "order": 1, "type": "database", "tables": [ { - "id": 5758, + "id": 917, "name": "Inspection Log", "order": 1, "fields": [ { - "id": 61975, + "id": 9168, "type": "formula", "name": "Log ID", "description": null, @@ -41,24 +41,24 @@ "immutable_type": false, "immutable_properties": false, "field_constraints": [], - "date_format": null, "number_decimal_places": null, - "duration_format": null, + "number_suffix": "", "date_time_format": null, + "date_show_tzinfo": null, + "number_separator": "", "date_include_time": null, - "number_suffix": "", - "number_prefix": "", - "date_force_timezone": null, "array_formula_type": null, "error": null, - "date_show_tzinfo": null, - "number_separator": "", "nullable": false, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "duration_format": null, "formula": "concat('L-00', row_id())", "formula_type": "text" }, { - "id": 61976, + "id": 9169, "type": "link_row", "name": "Equipment", "description": null, @@ -69,14 +69,14 @@ "immutable_type": false, "immutable_properties": false, "field_constraints": [], - "link_row_table_id": 5759, - "link_row_related_field_id": 61994, + "link_row_table_id": 918, + "link_row_related_field_id": 9187, "link_row_limit_selection_view_id": null, "has_related_field": true, "link_row_multiple_relationships": false }, { - "id": 61977, + "id": 9170, "type": "single_select", "name": "Log Type", "description": null, @@ -89,31 +89,31 @@ "field_constraints": [], "select_options": [ { - "id": 24358, + "id": 3551, "value": "Calibration Check", "color": "blue", "order": 0 }, { - "id": 24359, + "id": 3552, "value": "Reactive Repair", "color": "orange", "order": 1 }, { - "id": 24360, + "id": 3553, "value": "Safety Audit", "color": "green", "order": 2 }, { - "id": 24361, + "id": 3554, "value": "Routine", "color": "light-brown", "order": 3 }, { - "id": 24362, + "id": 3555, "value": "Post-Repair", "color": "light-pink", "order": 4 @@ -122,7 +122,7 @@ "single_select_default": null }, { - "id": 61978, + "id": 9171, "type": "number", "name": "Target Value", "description": null, @@ -141,7 +141,7 @@ "number_default": null }, { - "id": 61979, + "id": 9172, "type": "number", "name": "Observed Value", "description": null, @@ -160,7 +160,7 @@ "number_default": null }, { - "id": 61980, + "id": 9173, "type": "number", "name": "Tolerance Limit", "description": null, @@ -179,7 +179,7 @@ "number_default": null }, { - "id": 61981, + "id": 9174, "type": "single_select", "name": "Status", "description": null, @@ -192,19 +192,19 @@ "field_constraints": [], "select_options": [ { - "id": 24363, + "id": 3556, "value": "Pending Review", "color": "orange", "order": 0 }, { - "id": 24364, + "id": 3557, "value": "Work in Progress", "color": "yellow", "order": 1 }, { - "id": 24365, + "id": 3558, "value": "Completed", "color": "green", "order": 2 @@ -213,7 +213,7 @@ "single_select_default": null }, { - "id": 61982, + "id": 9175, "type": "rating", "name": "Priority", "description": null, @@ -229,7 +229,7 @@ "style": "star" }, { - "id": 61983, + "id": 9176, "type": "file", "name": "Photos/Evidence", "description": null, @@ -242,7 +242,7 @@ "field_constraints": [] }, { - "id": 61984, + "id": 9177, "type": "link_row", "name": "Performed By", "description": null, @@ -253,14 +253,14 @@ "immutable_type": false, "immutable_properties": false, "field_constraints": [], - "link_row_table_id": 5760, - "link_row_related_field_id": 61998, + "link_row_table_id": 919, + "link_row_related_field_id": 9191, "link_row_limit_selection_view_id": null, "has_related_field": true, "link_row_multiple_relationships": false }, { - "id": 62003, + "id": 9197, "type": "formula", "name": "Deviation", "description": null, @@ -271,24 +271,24 @@ "immutable_type": false, "immutable_properties": false, "field_constraints": [], - "date_format": null, "number_decimal_places": 2, - "duration_format": null, + "number_suffix": "", "date_time_format": null, + "date_show_tzinfo": null, + "number_separator": "", "date_include_time": null, - "number_suffix": "", - "number_prefix": "", - "date_force_timezone": null, "array_formula_type": null, "error": null, - "date_show_tzinfo": null, - "number_separator": "", "nullable": false, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "duration_format": null, "formula": "abs(field('Observed Value') - field('Target Value'))", "formula_type": "number" }, { - "id": 62009, + "id": 9203, "type": "formula", "name": "Calibration Result", "description": null, @@ -299,24 +299,24 @@ "immutable_type": false, "immutable_properties": false, "field_constraints": [], - "date_format": null, "number_decimal_places": null, - "duration_format": null, + "number_suffix": "", "date_time_format": null, + "date_show_tzinfo": null, + "number_separator": "", "date_include_time": null, - "number_suffix": "", - "number_prefix": "", - "date_force_timezone": null, "array_formula_type": null, "error": null, - "date_show_tzinfo": null, - "number_separator": "", "nullable": false, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "duration_format": null, "formula": "if(field('Deviation') <= field('Tolerance Limit'), '\u2705 Pass', '\u274c Fail')", "formula_type": "text" }, { - "id": 62012, + "id": 9206, "type": "formula", "name": "Auto-Alert Trigger", "description": null, @@ -327,24 +327,24 @@ "immutable_type": false, "immutable_properties": false, "field_constraints": [], - "date_format": null, "number_decimal_places": null, - "duration_format": null, + "number_suffix": "", "date_time_format": null, + "date_show_tzinfo": null, + "number_separator": "", "date_include_time": null, - "number_suffix": "", - "number_prefix": "", - "date_force_timezone": null, "array_formula_type": null, "error": null, - "date_show_tzinfo": null, - "number_separator": "", "nullable": false, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "duration_format": null, "formula": "if(field('Calibration Result') = '\u274c Fail', 'IMMEDIATE ESCALATION', 'Normal')", "formula_type": "text" }, { - "id": 62010, + "id": 9204, "type": "formula", "name": "Safety Status", "description": null, @@ -355,24 +355,24 @@ "immutable_type": false, "immutable_properties": false, "field_constraints": [], - "date_format": null, "number_decimal_places": null, - "duration_format": null, + "number_suffix": "", "date_time_format": null, + "date_show_tzinfo": null, + "number_separator": "", "date_include_time": null, - "number_suffix": "", - "number_prefix": "", - "date_force_timezone": null, "array_formula_type": null, "error": null, - "date_show_tzinfo": null, - "number_separator": "", "nullable": false, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "duration_format": null, "formula": "if(field('Deviation') > field('Tolerance Limit'), '\ud83d\udd34 CRITICAL: HALT MACHINE', '\ud83d\udfe2 SAFE')", "formula_type": "text" }, { - "id": 61985, + "id": 9178, "type": "boolean", "name": "Within Tolerance?", "description": null, @@ -386,7 +386,7 @@ "boolean_default": false }, { - "id": 61986, + "id": 9179, "type": "long_text", "name": "Failure Reason", "description": null, @@ -400,7 +400,7 @@ "long_text_enable_rich_text": true }, { - "id": 61987, + "id": 9180, "type": "date", "name": "Date", "description": null, @@ -420,7 +420,7 @@ ], "views": [ { - "id": 23888, + "id": 3950, "type": "form", "name": "Run Inspection Checklist", "order": 1, @@ -437,8 +437,8 @@ "submit_action_redirect_url": "", "field_options": [ { - "id": 28824, - "field_id": 61976, + "id": 3512, + "field_id": 9169, "name": "", "description": "", "enabled": true, @@ -453,8 +453,8 @@ "allowed_select_options": [] }, { - "id": 28825, - "field_id": 61977, + "id": 3513, + "field_id": 9170, "name": "", "description": "", "enabled": true, @@ -469,8 +469,8 @@ "allowed_select_options": [] }, { - "id": 28826, - "field_id": 61979, + "id": 3514, + "field_id": 9172, "name": "", "description": "", "enabled": true, @@ -485,8 +485,8 @@ "allowed_select_options": [] }, { - "id": 28827, - "field_id": 61978, + "id": 3515, + "field_id": 9171, "name": "", "description": "", "enabled": true, @@ -501,8 +501,8 @@ "allowed_select_options": [] }, { - "id": 28828, - "field_id": 61985, + "id": 3516, + "field_id": 9178, "name": "", "description": "", "enabled": true, @@ -512,8 +512,8 @@ "condition_type": "AND", "conditions": [ { - "id": 1527, - "field": 61979, + "id": 51, + "field": 9172, "type": "not_empty", "group": null, "value": "" @@ -525,8 +525,8 @@ "allowed_select_options": [] }, { - "id": 28829, - "field_id": 61986, + "id": 3517, + "field_id": 9179, "name": "", "description": "", "enabled": true, @@ -536,8 +536,8 @@ "condition_type": "AND", "conditions": [ { - "id": 1528, - "field": 61985, + "id": 52, + "field": 9178, "type": "boolean", "group": null, "value": "" @@ -549,8 +549,8 @@ "allowed_select_options": [] }, { - "id": 28830, - "field_id": 61983, + "id": 3518, + "field_id": 9176, "name": "", "description": "", "enabled": true, @@ -565,8 +565,8 @@ "allowed_select_options": [] }, { - "id": 28831, - "field_id": 61984, + "id": 3519, + "field_id": 9177, "name": "", "description": "", "enabled": true, @@ -581,8 +581,8 @@ "allowed_select_options": [] }, { - "id": 28832, - "field_id": 61975, + "id": 3520, + "field_id": 9168, "name": "", "description": "", "enabled": false, @@ -597,8 +597,8 @@ "allowed_select_options": [] }, { - "id": 28833, - "field_id": 61980, + "id": 3521, + "field_id": 9173, "name": "", "description": "", "enabled": false, @@ -613,8 +613,8 @@ "allowed_select_options": [] }, { - "id": 28834, - "field_id": 61981, + "id": 3522, + "field_id": 9174, "name": "", "description": "", "enabled": false, @@ -629,8 +629,8 @@ "allowed_select_options": [] }, { - "id": 28835, - "field_id": 61982, + "id": 3523, + "field_id": 9175, "name": "", "description": "", "enabled": false, @@ -645,8 +645,8 @@ "allowed_select_options": [] }, { - "id": 28836, - "field_id": 62003, + "id": 3524, + "field_id": 9197, "name": "", "description": "", "enabled": false, @@ -661,8 +661,8 @@ "allowed_select_options": [] }, { - "id": 28837, - "field_id": 62009, + "id": 3525, + "field_id": 9203, "name": "", "description": "", "enabled": false, @@ -677,8 +677,8 @@ "allowed_select_options": [] }, { - "id": 28838, - "field_id": 62012, + "id": 3526, + "field_id": 9206, "name": "", "description": "", "enabled": false, @@ -693,8 +693,8 @@ "allowed_select_options": [] }, { - "id": 28839, - "field_id": 62010, + "id": 3527, + "field_id": 9204, "name": "", "description": "", "enabled": false, @@ -709,8 +709,8 @@ "allowed_select_options": [] }, { - "id": 28840, - "field_id": 61987, + "id": 3528, + "field_id": 9180, "name": "", "description": "", "enabled": false, @@ -727,7 +727,7 @@ ] }, { - "id": 23889, + "id": 3951, "type": "grid", "name": "Technical Audit Log", "order": 2, @@ -740,8 +740,8 @@ "sortings": [], "group_bys": [ { - "id": 3012, - "field_id": 61977, + "id": 417, + "field_id": 9170, "order": "ASC" } ], @@ -751,8 +751,8 @@ "row_height_size": "small", "field_options": [ { - "id": 222436, - "field_id": 61975, + "id": 33319, + "field_id": 9168, "width": 200, "hidden": false, "order": 0, @@ -760,8 +760,8 @@ "aggregation_raw_type": "" }, { - "id": 222437, - "field_id": 62009, + "id": 33320, + "field_id": 9203, "width": 200, "hidden": false, "order": 1, @@ -769,8 +769,8 @@ "aggregation_raw_type": "" }, { - "id": 222438, - "field_id": 61976, + "id": 33321, + "field_id": 9169, "width": 200, "hidden": false, "order": 2, @@ -778,8 +778,8 @@ "aggregation_raw_type": "" }, { - "id": 222439, - "field_id": 61977, + "id": 33322, + "field_id": 9170, "width": 200, "hidden": false, "order": 4, @@ -787,8 +787,8 @@ "aggregation_raw_type": "" }, { - "id": 222440, - "field_id": 61978, + "id": 33323, + "field_id": 9171, "width": 200, "hidden": false, "order": 5, @@ -796,8 +796,8 @@ "aggregation_raw_type": "" }, { - "id": 222441, - "field_id": 61979, + "id": 33324, + "field_id": 9172, "width": 200, "hidden": false, "order": 6, @@ -805,8 +805,8 @@ "aggregation_raw_type": "" }, { - "id": 222442, - "field_id": 61980, + "id": 33325, + "field_id": 9173, "width": 200, "hidden": false, "order": 7, @@ -814,8 +814,8 @@ "aggregation_raw_type": "" }, { - "id": 222443, - "field_id": 61981, + "id": 33326, + "field_id": 9174, "width": 200, "hidden": false, "order": 8, @@ -823,8 +823,8 @@ "aggregation_raw_type": "" }, { - "id": 222444, - "field_id": 61982, + "id": 33327, + "field_id": 9175, "width": 200, "hidden": false, "order": 9, @@ -832,8 +832,8 @@ "aggregation_raw_type": "" }, { - "id": 222445, - "field_id": 61983, + "id": 33328, + "field_id": 9176, "width": 200, "hidden": false, "order": 10, @@ -841,8 +841,8 @@ "aggregation_raw_type": "" }, { - "id": 222446, - "field_id": 61984, + "id": 33329, + "field_id": 9177, "width": 200, "hidden": false, "order": 11, @@ -850,8 +850,8 @@ "aggregation_raw_type": "" }, { - "id": 222447, - "field_id": 62003, + "id": 33330, + "field_id": 9197, "width": 200, "hidden": false, "order": 12, @@ -859,8 +859,8 @@ "aggregation_raw_type": "" }, { - "id": 222448, - "field_id": 62012, + "id": 33331, + "field_id": 9206, "width": 200, "hidden": false, "order": 13, @@ -868,8 +868,8 @@ "aggregation_raw_type": "" }, { - "id": 222449, - "field_id": 62010, + "id": 33332, + "field_id": 9204, "width": 200, "hidden": false, "order": 15, @@ -877,8 +877,8 @@ "aggregation_raw_type": "" }, { - "id": 222450, - "field_id": 61985, + "id": 33333, + "field_id": 9178, "width": 200, "hidden": false, "order": 32767, @@ -886,8 +886,8 @@ "aggregation_raw_type": "" }, { - "id": 222451, - "field_id": 61986, + "id": 33334, + "field_id": 9179, "width": 200, "hidden": false, "order": 32767, @@ -895,8 +895,8 @@ "aggregation_raw_type": "" }, { - "id": 222452, - "field_id": 61987, + "id": 33335, + "field_id": 9180, "width": 200, "hidden": false, "order": 32767, @@ -906,7 +906,7 @@ ] }, { - "id": 23890, + "id": 3952, "type": "grid", "name": "Failed Calibrations", "order": 3, @@ -916,8 +916,8 @@ "filters_disabled": false, "filters": [ { - "id": 14546, - "field_id": 62009, + "id": 2084, + "field_id": 9203, "type": "equal", "value": "\u274c Fail", "group": null @@ -932,8 +932,8 @@ "row_height_size": "small", "field_options": [ { - "id": 222453, - "field_id": 61975, + "id": 33336, + "field_id": 9168, "width": 200, "hidden": false, "order": 32767, @@ -941,8 +941,8 @@ "aggregation_raw_type": "" }, { - "id": 222454, - "field_id": 61976, + "id": 33337, + "field_id": 9169, "width": 200, "hidden": false, "order": 32767, @@ -950,8 +950,8 @@ "aggregation_raw_type": "" }, { - "id": 222455, - "field_id": 61977, + "id": 33338, + "field_id": 9170, "width": 200, "hidden": false, "order": 32767, @@ -959,8 +959,8 @@ "aggregation_raw_type": "" }, { - "id": 222456, - "field_id": 61978, + "id": 33339, + "field_id": 9171, "width": 200, "hidden": false, "order": 32767, @@ -968,8 +968,8 @@ "aggregation_raw_type": "" }, { - "id": 222457, - "field_id": 61979, + "id": 33340, + "field_id": 9172, "width": 200, "hidden": false, "order": 32767, @@ -977,8 +977,8 @@ "aggregation_raw_type": "" }, { - "id": 222458, - "field_id": 61980, + "id": 33341, + "field_id": 9173, "width": 200, "hidden": false, "order": 32767, @@ -986,8 +986,8 @@ "aggregation_raw_type": "" }, { - "id": 222459, - "field_id": 61981, + "id": 33342, + "field_id": 9174, "width": 200, "hidden": false, "order": 32767, @@ -995,8 +995,8 @@ "aggregation_raw_type": "" }, { - "id": 222460, - "field_id": 61982, + "id": 33343, + "field_id": 9175, "width": 200, "hidden": false, "order": 32767, @@ -1004,8 +1004,8 @@ "aggregation_raw_type": "" }, { - "id": 222461, - "field_id": 61983, + "id": 33344, + "field_id": 9176, "width": 200, "hidden": false, "order": 32767, @@ -1013,8 +1013,8 @@ "aggregation_raw_type": "" }, { - "id": 222462, - "field_id": 61984, + "id": 33345, + "field_id": 9177, "width": 200, "hidden": false, "order": 32767, @@ -1022,8 +1022,8 @@ "aggregation_raw_type": "" }, { - "id": 222463, - "field_id": 62003, + "id": 33346, + "field_id": 9197, "width": 200, "hidden": false, "order": 32767, @@ -1031,8 +1031,8 @@ "aggregation_raw_type": "" }, { - "id": 222464, - "field_id": 62009, + "id": 33347, + "field_id": 9203, "width": 200, "hidden": false, "order": 32767, @@ -1040,8 +1040,8 @@ "aggregation_raw_type": "" }, { - "id": 222466, - "field_id": 62010, + "id": 33348, + "field_id": 9204, "width": 200, "hidden": false, "order": 32767, @@ -1049,8 +1049,8 @@ "aggregation_raw_type": "" }, { - "id": 222465, - "field_id": 62012, + "id": 33349, + "field_id": 9206, "width": 200, "hidden": false, "order": 32767, @@ -1060,7 +1060,7 @@ ] }, { - "id": 23891, + "id": 3953, "type": "grid", "name": "Passed Calibrations", "order": 4, @@ -1070,8 +1070,8 @@ "filters_disabled": false, "filters": [ { - "id": 14547, - "field_id": 62009, + "id": 2085, + "field_id": 9203, "type": "equal", "value": "\u2705 Pass", "group": null @@ -1086,8 +1086,8 @@ "row_height_size": "small", "field_options": [ { - "id": 222467, - "field_id": 61975, + "id": 33350, + "field_id": 9168, "width": 200, "hidden": false, "order": 32767, @@ -1095,8 +1095,8 @@ "aggregation_raw_type": "" }, { - "id": 222468, - "field_id": 61976, + "id": 33351, + "field_id": 9169, "width": 200, "hidden": false, "order": 32767, @@ -1104,8 +1104,8 @@ "aggregation_raw_type": "" }, { - "id": 222469, - "field_id": 61977, + "id": 33352, + "field_id": 9170, "width": 200, "hidden": false, "order": 32767, @@ -1113,8 +1113,8 @@ "aggregation_raw_type": "" }, { - "id": 222470, - "field_id": 61978, + "id": 33353, + "field_id": 9171, "width": 200, "hidden": false, "order": 32767, @@ -1122,8 +1122,8 @@ "aggregation_raw_type": "" }, { - "id": 222471, - "field_id": 61979, + "id": 33354, + "field_id": 9172, "width": 200, "hidden": false, "order": 32767, @@ -1131,8 +1131,8 @@ "aggregation_raw_type": "" }, { - "id": 222472, - "field_id": 61980, + "id": 33355, + "field_id": 9173, "width": 200, "hidden": false, "order": 32767, @@ -1140,8 +1140,8 @@ "aggregation_raw_type": "" }, { - "id": 222473, - "field_id": 61981, + "id": 33356, + "field_id": 9174, "width": 200, "hidden": false, "order": 32767, @@ -1149,8 +1149,8 @@ "aggregation_raw_type": "" }, { - "id": 222474, - "field_id": 61982, + "id": 33357, + "field_id": 9175, "width": 200, "hidden": false, "order": 32767, @@ -1158,8 +1158,8 @@ "aggregation_raw_type": "" }, { - "id": 222475, - "field_id": 61983, + "id": 33358, + "field_id": 9176, "width": 200, "hidden": false, "order": 32767, @@ -1167,8 +1167,8 @@ "aggregation_raw_type": "" }, { - "id": 222476, - "field_id": 61984, + "id": 33359, + "field_id": 9177, "width": 200, "hidden": false, "order": 32767, @@ -1176,8 +1176,8 @@ "aggregation_raw_type": "" }, { - "id": 222477, - "field_id": 62003, + "id": 33360, + "field_id": 9197, "width": 200, "hidden": false, "order": 32767, @@ -1185,8 +1185,8 @@ "aggregation_raw_type": "" }, { - "id": 222478, - "field_id": 62009, + "id": 33361, + "field_id": 9203, "width": 200, "hidden": false, "order": 32767, @@ -1194,8 +1194,8 @@ "aggregation_raw_type": "" }, { - "id": 222480, - "field_id": 62010, + "id": 33362, + "field_id": 9204, "width": 200, "hidden": false, "order": 32767, @@ -1203,8 +1203,8 @@ "aggregation_raw_type": "" }, { - "id": 222479, - "field_id": 62012, + "id": 33363, + "field_id": 9206, "width": 200, "hidden": false, "order": 32767, @@ -1214,7 +1214,7 @@ ] }, { - "id": 23892, + "id": 3954, "type": "grid", "name": "Escalation", "order": 5, @@ -1224,25 +1224,25 @@ "filters_disabled": false, "filters": [ { - "id": 14548, - "field_id": 62012, + "id": 2086, + "field_id": 9206, "type": "equal", "value": "IMMEDIATE ESCALATION", "group": null }, { - "id": 14549, - "field_id": 61981, + "id": 2087, + "field_id": 9174, "type": "single_select_not_equal", - "value": "24365", + "value": "3558", "group": null } ], "filter_groups": [], "sortings": [ { - "id": 15927, - "field_id": 61975, + "id": 2641, + "field_id": 9168, "order": "ASC" } ], @@ -1253,8 +1253,8 @@ "row_height_size": "small", "field_options": [ { - "id": 222481, - "field_id": 61975, + "id": 33364, + "field_id": 9168, "width": 200, "hidden": false, "order": 0, @@ -1262,8 +1262,8 @@ "aggregation_raw_type": "" }, { - "id": 222482, - "field_id": 61976, + "id": 33365, + "field_id": 9169, "width": 200, "hidden": false, "order": 1, @@ -1271,8 +1271,8 @@ "aggregation_raw_type": "" }, { - "id": 222483, - "field_id": 61977, + "id": 33366, + "field_id": 9170, "width": 200, "hidden": false, "order": 2, @@ -1280,8 +1280,8 @@ "aggregation_raw_type": "" }, { - "id": 222484, - "field_id": 61978, + "id": 33367, + "field_id": 9171, "width": 200, "hidden": false, "order": 3, @@ -1289,8 +1289,8 @@ "aggregation_raw_type": "" }, { - "id": 222485, - "field_id": 61979, + "id": 33368, + "field_id": 9172, "width": 200, "hidden": false, "order": 4, @@ -1298,8 +1298,8 @@ "aggregation_raw_type": "" }, { - "id": 222486, - "field_id": 61980, + "id": 33369, + "field_id": 9173, "width": 200, "hidden": false, "order": 5, @@ -1307,8 +1307,8 @@ "aggregation_raw_type": "" }, { - "id": 222487, - "field_id": 61981, + "id": 33370, + "field_id": 9174, "width": 200, "hidden": false, "order": 6, @@ -1316,8 +1316,8 @@ "aggregation_raw_type": "" }, { - "id": 222488, - "field_id": 61982, + "id": 33371, + "field_id": 9175, "width": 200, "hidden": true, "order": 7, @@ -1325,8 +1325,8 @@ "aggregation_raw_type": "" }, { - "id": 222489, - "field_id": 61983, + "id": 33372, + "field_id": 9176, "width": 200, "hidden": true, "order": 8, @@ -1334,8 +1334,8 @@ "aggregation_raw_type": "" }, { - "id": 222490, - "field_id": 61985, + "id": 33373, + "field_id": 9178, "width": 200, "hidden": false, "order": 10, @@ -1343,8 +1343,8 @@ "aggregation_raw_type": "" }, { - "id": 222491, - "field_id": 61986, + "id": 33374, + "field_id": 9179, "width": 200, "hidden": false, "order": 11, @@ -1352,8 +1352,8 @@ "aggregation_raw_type": "" }, { - "id": 222492, - "field_id": 61984, + "id": 33375, + "field_id": 9177, "width": 200, "hidden": false, "order": 12, @@ -1361,8 +1361,8 @@ "aggregation_raw_type": "" }, { - "id": 222493, - "field_id": 62003, + "id": 33376, + "field_id": 9197, "width": 200, "hidden": false, "order": 13, @@ -1370,8 +1370,8 @@ "aggregation_raw_type": "" }, { - "id": 222494, - "field_id": 62009, + "id": 33377, + "field_id": 9203, "width": 200, "hidden": false, "order": 14, @@ -1379,8 +1379,8 @@ "aggregation_raw_type": "" }, { - "id": 222495, - "field_id": 62012, + "id": 33378, + "field_id": 9206, "width": 200, "hidden": false, "order": 15, @@ -1388,8 +1388,8 @@ "aggregation_raw_type": "" }, { - "id": 222496, - "field_id": 62010, + "id": 33379, + "field_id": 9204, "width": 200, "hidden": true, "order": 16, @@ -1399,7 +1399,7 @@ ] }, { - "id": 24068, + "id": 3955, "type": "grid", "name": "Grid", "order": 6, @@ -1417,8 +1417,8 @@ "row_height_size": "small", "field_options": [ { - "id": 224437, - "field_id": 61975, + "id": 33380, + "field_id": 9168, "width": 200, "hidden": false, "order": 32767, @@ -1426,8 +1426,8 @@ "aggregation_raw_type": "" }, { - "id": 224438, - "field_id": 61976, + "id": 33381, + "field_id": 9169, "width": 200, "hidden": false, "order": 32767, @@ -1435,8 +1435,8 @@ "aggregation_raw_type": "" }, { - "id": 224439, - "field_id": 61977, + "id": 33382, + "field_id": 9170, "width": 200, "hidden": false, "order": 32767, @@ -1444,8 +1444,8 @@ "aggregation_raw_type": "" }, { - "id": 224440, - "field_id": 61978, + "id": 33383, + "field_id": 9171, "width": 200, "hidden": false, "order": 32767, @@ -1453,8 +1453,8 @@ "aggregation_raw_type": "" }, { - "id": 224441, - "field_id": 61979, + "id": 33384, + "field_id": 9172, "width": 200, "hidden": false, "order": 32767, @@ -1462,8 +1462,8 @@ "aggregation_raw_type": "" }, { - "id": 224442, - "field_id": 61980, + "id": 33385, + "field_id": 9173, "width": 200, "hidden": false, "order": 32767, @@ -1471,8 +1471,8 @@ "aggregation_raw_type": "" }, { - "id": 224443, - "field_id": 61981, + "id": 33386, + "field_id": 9174, "width": 200, "hidden": false, "order": 32767, @@ -1480,8 +1480,8 @@ "aggregation_raw_type": "" }, { - "id": 224444, - "field_id": 61982, + "id": 33387, + "field_id": 9175, "width": 200, "hidden": false, "order": 32767, @@ -1489,8 +1489,8 @@ "aggregation_raw_type": "" }, { - "id": 224445, - "field_id": 61983, + "id": 33388, + "field_id": 9176, "width": 200, "hidden": false, "order": 32767, @@ -1498,8 +1498,8 @@ "aggregation_raw_type": "" }, { - "id": 224446, - "field_id": 61984, + "id": 33389, + "field_id": 9177, "width": 200, "hidden": false, "order": 32767, @@ -1507,8 +1507,8 @@ "aggregation_raw_type": "" }, { - "id": 224451, - "field_id": 61985, + "id": 33390, + "field_id": 9178, "width": 200, "hidden": false, "order": 32767, @@ -1516,8 +1516,8 @@ "aggregation_raw_type": "" }, { - "id": 224452, - "field_id": 61986, + "id": 33391, + "field_id": 9179, "width": 200, "hidden": false, "order": 32767, @@ -1525,8 +1525,8 @@ "aggregation_raw_type": "" }, { - "id": 224453, - "field_id": 61987, + "id": 33392, + "field_id": 9180, "width": 200, "hidden": false, "order": 32767, @@ -1534,8 +1534,8 @@ "aggregation_raw_type": "" }, { - "id": 224447, - "field_id": 62003, + "id": 33393, + "field_id": 9197, "width": 200, "hidden": false, "order": 32767, @@ -1543,8 +1543,8 @@ "aggregation_raw_type": "" }, { - "id": 224448, - "field_id": 62009, + "id": 33394, + "field_id": 9203, "width": 200, "hidden": false, "order": 32767, @@ -1552,8 +1552,8 @@ "aggregation_raw_type": "" }, { - "id": 224450, - "field_id": 62010, + "id": 33395, + "field_id": 9204, "width": 200, "hidden": false, "order": 32767, @@ -1561,8 +1561,8 @@ "aggregation_raw_type": "" }, { - "id": 224449, - "field_id": 62012, + "id": 33396, + "field_id": 9206, "width": 200, "hidden": false, "order": 32767, @@ -1578,336 +1578,336 @@ "order": "1.00000000000000000000", "created_on": "2026-02-11T15:06:02.786139+00:00", "updated_on": "2026-02-12T11:59:44.755138+00:00", - "field_61975": null, - "field_61976": [ + "field_9168": null, + "field_9169": [ 1 ], - "field_61977": 24358, - "field_61978": "100.00", - "field_61979": "98.00", - "field_61980": "5.00", - "field_61981": 24363, - "field_61982": 3, - "field_61983": [], - "field_61984": [ + "field_9170": 3551, + "field_9171": "100.00", + "field_9172": "98.00", + "field_9173": "5.00", + "field_9174": 3556, + "field_9175": 3, + "field_9176": [], + "field_9177": [ 3 ], - "field_62003": null, - "field_62009": null, - "field_62012": null, - "field_62010": null, - "field_61985": "true", - "field_61986": "", - "field_61987": "2023-06-15" + "field_9197": null, + "field_9203": null, + "field_9206": null, + "field_9204": null, + "field_9178": "true", + "field_9179": "", + "field_9180": "2023-06-15" }, { "id": 2, "order": "2.00000000000000000000", "created_on": "2026-02-11T15:06:02.786225+00:00", "updated_on": "2026-02-12T11:59:44.755230+00:00", - "field_61975": null, - "field_61976": [ + "field_9168": null, + "field_9169": [ 2 ], - "field_61977": 24359, - "field_61978": "0.00", - "field_61979": "0.00", - "field_61980": "0.00", - "field_61981": 24364, - "field_61982": 4, - "field_61983": [], - "field_61984": [ + "field_9170": 3552, + "field_9171": "0.00", + "field_9172": "0.00", + "field_9173": "0.00", + "field_9174": 3557, + "field_9175": 4, + "field_9176": [], + "field_9177": [ 7 ], - "field_62003": null, - "field_62009": null, - "field_62012": null, - "field_62010": null, - "field_61985": "false", - "field_61986": "Calibration drift detected", - "field_61987": "2023-05-30" + "field_9197": null, + "field_9203": null, + "field_9206": null, + "field_9204": null, + "field_9178": "false", + "field_9179": "Calibration drift detected", + "field_9180": "2023-05-30" }, { "id": 3, "order": "3.00000000000000000000", "created_on": "2026-02-11T15:06:02.786255+00:00", "updated_on": "2026-02-12T11:59:44.755255+00:00", - "field_61975": null, - "field_61976": [ + "field_9168": null, + "field_9169": [ 3 ], - "field_61977": 24360, - "field_61978": "0.00", - "field_61979": "0.00", - "field_61980": "0.00", - "field_61981": 24365, - "field_61982": 2, - "field_61983": [], - "field_61984": [ + "field_9170": 3553, + "field_9171": "0.00", + "field_9172": "0.00", + "field_9173": "0.00", + "field_9174": 3558, + "field_9175": 2, + "field_9176": [], + "field_9177": [ 5 ], - "field_62003": null, - "field_62009": null, - "field_62012": null, - "field_62010": null, - "field_61985": "true", - "field_61986": "", - "field_61987": "2025-05-10" + "field_9197": null, + "field_9203": null, + "field_9206": null, + "field_9204": null, + "field_9178": "true", + "field_9179": "", + "field_9180": "2025-05-10" }, { "id": 4, "order": "4.00000000000000000000", "created_on": "2026-02-11T15:06:02.786280+00:00", "updated_on": "2026-02-12T11:59:44.755275+00:00", - "field_61975": null, - "field_61976": [ + "field_9168": null, + "field_9169": [ 4 ], - "field_61977": 24362, - "field_61978": "120.00", - "field_61979": "119.00", - "field_61980": "3.00", - "field_61981": 24363, - "field_61982": 3, - "field_61983": [], - "field_61984": [ + "field_9170": 3555, + "field_9171": "120.00", + "field_9172": "119.00", + "field_9173": "3.00", + "field_9174": 3556, + "field_9175": 3, + "field_9176": [], + "field_9177": [ 1 ], - "field_62003": null, - "field_62009": null, - "field_62012": null, - "field_62010": null, - "field_61985": "true", - "field_61986": "", - "field_61987": "2023-01-20" + "field_9197": null, + "field_9203": null, + "field_9206": null, + "field_9204": null, + "field_9178": "true", + "field_9179": "", + "field_9180": "2023-01-20" }, { "id": 5, "order": "5.00000000000000000000", "created_on": "2026-02-11T15:06:02.786305+00:00", "updated_on": "2026-02-12T11:59:44.755293+00:00", - "field_61975": null, - "field_61976": [ + "field_9168": null, + "field_9169": [ 5 ], - "field_61977": 24359, - "field_61978": "0.00", - "field_61979": "0.00", - "field_61980": "0.00", - "field_61981": 24364, - "field_61982": 4, - "field_61983": [], - "field_61984": [ + "field_9170": 3552, + "field_9171": "0.00", + "field_9172": "0.00", + "field_9173": "0.00", + "field_9174": 3557, + "field_9175": 4, + "field_9176": [], + "field_9177": [ 8 ], - "field_62003": null, - "field_62009": null, - "field_62012": null, - "field_62010": null, - "field_61985": "false", - "field_61986": "Sensor malfunction", - "field_61987": "2025-11-11" + "field_9197": null, + "field_9203": null, + "field_9206": null, + "field_9204": null, + "field_9178": "false", + "field_9179": "Sensor malfunction", + "field_9180": "2025-11-11" }, { "id": 6, "order": "6.00000000000000000000", "created_on": "2026-02-11T15:06:02.786331+00:00", "updated_on": "2026-02-12T11:59:49.610107+00:00", - "field_61975": null, - "field_61976": [ + "field_9168": null, + "field_9169": [ 6 ], - "field_61977": 24360, - "field_61978": "0.00", - "field_61979": "0.00", - "field_61980": "0.00", - "field_61981": 24365, - "field_61982": 3, - "field_61983": [], - "field_61984": [ + "field_9170": 3553, + "field_9171": "0.00", + "field_9172": "0.00", + "field_9173": "0.00", + "field_9174": 3558, + "field_9175": 3, + "field_9176": [], + "field_9177": [ 2 ], - "field_62003": null, - "field_62009": null, - "field_62012": null, - "field_62010": null, - "field_61985": "true", - "field_61986": "", - "field_61987": "2023-03-14" + "field_9197": null, + "field_9203": null, + "field_9206": null, + "field_9204": null, + "field_9178": "true", + "field_9179": "", + "field_9180": "2023-03-14" }, { "id": 7, "order": "7.00000000000000000000", "created_on": "2026-02-11T15:06:02.786357+00:00", "updated_on": "2026-02-12T11:59:44.755311+00:00", - "field_61975": null, - "field_61976": [ + "field_9168": null, + "field_9169": [ 7 ], - "field_61977": 24358, - "field_61978": "150.00", - "field_61979": "148.00", - "field_61980": "4.00", - "field_61981": 24363, - "field_61982": 3, - "field_61983": [], - "field_61984": [ + "field_9170": 3551, + "field_9171": "150.00", + "field_9172": "148.00", + "field_9173": "4.00", + "field_9174": 3556, + "field_9175": 3, + "field_9176": [], + "field_9177": [ 6 ], - "field_62003": null, - "field_62009": null, - "field_62012": null, - "field_62010": null, - "field_61985": "true", - "field_61986": "", - "field_61987": "2025-01-12" + "field_9197": null, + "field_9203": null, + "field_9206": null, + "field_9204": null, + "field_9178": "true", + "field_9179": "", + "field_9180": "2025-01-12" }, { "id": 8, "order": "8.00000000000000000000", "created_on": "2026-02-11T15:06:02.786383+00:00", "updated_on": "2026-02-12T11:59:44.755328+00:00", - "field_61975": null, - "field_61976": [ + "field_9168": null, + "field_9169": [ 8 ], - "field_61977": 24362, - "field_61978": "0.00", - "field_61979": "0.00", - "field_61980": "0.00", - "field_61981": 24364, - "field_61982": 4, - "field_61983": [], - "field_61984": [ + "field_9170": 3555, + "field_9171": "0.00", + "field_9172": "0.00", + "field_9173": "0.00", + "field_9174": 3557, + "field_9175": 4, + "field_9176": [], + "field_9177": [ 7 ], - "field_62003": null, - "field_62009": null, - "field_62012": null, - "field_62010": null, - "field_61985": "false", - "field_61986": "Calibration out of spec", - "field_61987": "2023-05-07" + "field_9197": null, + "field_9203": null, + "field_9206": null, + "field_9204": null, + "field_9178": "false", + "field_9179": "Calibration out of spec", + "field_9180": "2023-05-07" }, { "id": 9, "order": "9.00000000000000000000", "created_on": "2026-02-11T15:06:02.786408+00:00", "updated_on": "2026-02-12T11:59:49.610178+00:00", - "field_61975": null, - "field_61976": [ + "field_9168": null, + "field_9169": [ 9 ], - "field_61977": 24360, - "field_61978": "0.00", - "field_61979": "0.00", - "field_61980": "0.00", - "field_61981": 24365, - "field_61982": 2, - "field_61983": [], - "field_61984": [ + "field_9170": 3553, + "field_9171": "0.00", + "field_9172": "0.00", + "field_9173": "0.00", + "field_9174": 3558, + "field_9175": 2, + "field_9176": [], + "field_9177": [ 4 ], - "field_62003": null, - "field_62009": null, - "field_62012": null, - "field_62010": null, - "field_61985": "true", - "field_61986": "", - "field_61987": "2025-05-10" + "field_9197": null, + "field_9203": null, + "field_9206": null, + "field_9204": null, + "field_9178": "true", + "field_9179": "", + "field_9180": "2025-05-10" }, { "id": 10, "order": "10.00000000000000000000", "created_on": "2026-02-11T15:06:02.786433+00:00", "updated_on": "2026-02-12T11:59:44.755345+00:00", - "field_61975": null, - "field_61976": [ + "field_9168": null, + "field_9169": [ 10 ], - "field_61977": 24358, - "field_61978": "200.00", - "field_61979": "197.00", - "field_61980": "5.00", - "field_61981": 24363, - "field_61982": 5, - "field_61983": [], - "field_61984": [ + "field_9170": 3551, + "field_9171": "200.00", + "field_9172": "197.00", + "field_9173": "5.00", + "field_9174": 3556, + "field_9175": 5, + "field_9176": [], + "field_9177": [ 5 ], - "field_62003": null, - "field_62009": null, - "field_62012": null, - "field_62010": null, - "field_61985": "true", - "field_61986": "", - "field_61987": "2023-10-09" + "field_9197": null, + "field_9203": null, + "field_9206": null, + "field_9204": null, + "field_9178": "true", + "field_9179": "", + "field_9180": "2023-10-09" }, { "id": 11, "order": "11.00000000000000000000", "created_on": "2026-02-11T15:41:05.121105+00:00", "updated_on": "2026-02-12T11:59:44.755362+00:00", - "field_61975": null, - "field_61976": [ + "field_9168": null, + "field_9169": [ 10 ], - "field_61977": 24361, - "field_61978": "100.00", - "field_61979": "120.00", - "field_61980": "10.00", - "field_61981": 24363, - "field_61982": 2, - "field_61983": [], - "field_61984": [ + "field_9170": 3554, + "field_9171": "100.00", + "field_9172": "120.00", + "field_9173": "10.00", + "field_9174": 3556, + "field_9175": 2, + "field_9176": [], + "field_9177": [ 3 ], - "field_62003": null, - "field_62009": null, - "field_62012": null, - "field_62010": null, - "field_61985": "false", - "field_61986": "Incorrect gauge reading", - "field_61987": "2023-08-22" + "field_9197": null, + "field_9203": null, + "field_9206": null, + "field_9204": null, + "field_9178": "false", + "field_9179": "Incorrect gauge reading", + "field_9180": "2023-08-22" }, { "id": 12, "order": "12.00000000000000000000", "created_on": "2026-02-11T15:41:05.121185+00:00", "updated_on": "2026-02-12T11:59:44.755379+00:00", - "field_61975": null, - "field_61976": [ + "field_9168": null, + "field_9169": [ 4 ], - "field_61977": 24361, - "field_61978": "50.00", - "field_61979": "70.00", - "field_61980": "5.00", - "field_61981": 24363, - "field_61982": 3, - "field_61983": [], - "field_61984": [ + "field_9170": 3554, + "field_9171": "50.00", + "field_9172": "70.00", + "field_9173": "5.00", + "field_9174": 3556, + "field_9175": 3, + "field_9176": [], + "field_9177": [ 2 ], - "field_62003": null, - "field_62009": null, - "field_62012": null, - "field_62010": null, - "field_61985": "true", - "field_61986": "", - "field_61987": "2023-03-14" + "field_9197": null, + "field_9203": null, + "field_9206": null, + "field_9204": null, + "field_9178": "true", + "field_9179": "", + "field_9180": "2023-03-14" } ], "data_sync": null, "field_rules": [] }, { - "id": 5759, + "id": 918, "name": "Equipment", "order": 2, "fields": [ { - "id": 61988, + "id": 9181, "type": "formula", "name": "Equipment ID", "description": null, @@ -1918,24 +1918,24 @@ "immutable_type": false, "immutable_properties": false, "field_constraints": [], - "date_format": null, "number_decimal_places": null, - "duration_format": null, + "number_suffix": "", "date_time_format": null, + "date_show_tzinfo": null, + "number_separator": "", "date_include_time": null, - "number_suffix": "", - "number_prefix": "", - "date_force_timezone": null, "array_formula_type": null, "error": null, - "date_show_tzinfo": null, - "number_separator": "", "nullable": false, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "duration_format": null, "formula": "concat('M-00', row_id())", "formula_type": "text" }, { - "id": 61989, + "id": 9182, "type": "text", "name": "Model", "description": null, @@ -1949,7 +1949,7 @@ "text_default": "" }, { - "id": 61990, + "id": 9183, "type": "single_select", "name": "Location", "description": null, @@ -1962,19 +1962,19 @@ "field_constraints": [], "select_options": [ { - "id": 24366, + "id": 3559, "value": "Imaging Lab A", "color": "blue", "order": 0 }, { - "id": 24367, + "id": 3560, "value": "Sterilization", "color": "green", "order": 1 }, { - "id": 24368, + "id": 3561, "value": "Assembly Line 4", "color": "orange", "order": 2 @@ -1983,7 +1983,7 @@ "single_select_default": null }, { - "id": 61991, + "id": 9184, "type": "single_select", "name": "Status", "description": null, @@ -1996,25 +1996,25 @@ "field_constraints": [], "select_options": [ { - "id": 24369, + "id": 3562, "value": "Operational", "color": "green", "order": 0 }, { - "id": 24370, + "id": 3563, "value": "Calibration Required", "color": "orange", "order": 1 }, { - "id": 24371, + "id": 3564, "value": "Maintenance In-Progress", "color": "yellow", "order": 2 }, { - "id": 24372, + "id": 3565, "value": "Down", "color": "red", "order": 3 @@ -2023,7 +2023,7 @@ "single_select_default": null }, { - "id": 61992, + "id": 9185, "type": "number", "name": "Calibration Interval (Days)", "description": null, @@ -2042,7 +2042,7 @@ "number_default": null }, { - "id": 61993, + "id": 9186, "type": "date", "name": "Last Calibration Date", "description": null, @@ -2060,7 +2060,7 @@ "date_force_timezone": null }, { - "id": 61994, + "id": 9187, "type": "link_row", "name": "Maintenance & Call Logs", "description": null, @@ -2071,14 +2071,14 @@ "immutable_type": false, "immutable_properties": false, "field_constraints": [], - "link_row_table_id": 5758, - "link_row_related_field_id": 61976, + "link_row_table_id": 917, + "link_row_related_field_id": 9169, "link_row_limit_selection_view_id": null, "has_related_field": true, "link_row_multiple_relationships": true }, { - "id": 62004, + "id": 9198, "type": "formula", "name": "Next Calibration Due", "description": null, @@ -2089,24 +2089,24 @@ "immutable_type": false, "immutable_properties": false, "field_constraints": [], - "date_format": "EU", "number_decimal_places": null, - "duration_format": null, + "number_suffix": "", "date_time_format": "24", + "date_show_tzinfo": false, + "number_separator": "", "date_include_time": false, - "number_suffix": "", - "number_prefix": "", - "date_force_timezone": null, "array_formula_type": null, "error": null, - "date_show_tzinfo": false, - "number_separator": "", "nullable": true, + "date_format": "EU", + "number_prefix": "", + "date_force_timezone": null, + "duration_format": null, "formula": "field('Last Calibration Date') + multiply(date_interval('1 day'), field('Calibration Interval (Days)'))", "formula_type": "date" }, { - "id": 62011, + "id": 9205, "type": "formula", "name": "Compliance Status", "description": null, @@ -2117,24 +2117,24 @@ "immutable_type": false, "immutable_properties": false, "field_constraints": [], - "date_format": null, "number_decimal_places": null, - "duration_format": null, + "number_suffix": "", "date_time_format": null, + "date_show_tzinfo": null, + "number_separator": "", "date_include_time": null, - "number_suffix": "", - "number_prefix": "", - "date_force_timezone": null, "array_formula_type": null, "error": null, - "date_show_tzinfo": null, - "number_separator": "", "nullable": false, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "duration_format": null, "formula": "if(today() > field('Next Calibration Due'), '\u26a0\ufe0f Overdue', '\u2705 Compliant')", "formula_type": "text" }, { - "id": 62005, + "id": 9199, "type": "lookup", "name": "Open Risk Level (Rollup)", "description": null, @@ -2145,26 +2145,26 @@ "immutable_type": false, "immutable_properties": false, "field_constraints": [], - "date_format": null, "number_decimal_places": 0, - "duration_format": null, + "number_suffix": "", "date_time_format": null, + "date_show_tzinfo": null, + "number_separator": "", "date_include_time": null, - "number_suffix": "", - "number_prefix": "", - "date_force_timezone": null, "array_formula_type": "number", "error": null, - "date_show_tzinfo": null, - "number_separator": "", "nullable": false, - "through_field_id": 61994, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "duration_format": null, + "through_field_id": 9187, "through_field_name": "Maintenance & Call Logs", - "target_field_id": 61982, + "target_field_id": 9175, "target_field_name": "Priority" }, { - "id": 61995, + "id": 9188, "type": "date", "name": "Warranty Expiry", "description": null, @@ -2182,7 +2182,7 @@ "date_force_timezone": null }, { - "id": 61996, + "id": 9189, "type": "file", "name": "Technical Manual Uploads", "description": null, @@ -2195,7 +2195,7 @@ "field_constraints": [] }, { - "id": 62006, + "id": 9200, "type": "lookup", "name": "Performed By", "description": null, @@ -2206,28 +2206,28 @@ "immutable_type": false, "immutable_properties": false, "field_constraints": [], - "date_format": null, "number_decimal_places": null, - "duration_format": null, + "number_suffix": "", "date_time_format": null, + "date_show_tzinfo": null, + "number_separator": "", "date_include_time": null, - "number_suffix": "", - "number_prefix": "", - "date_force_timezone": null, "array_formula_type": "text", "error": null, - "date_show_tzinfo": null, - "number_separator": "", "nullable": true, - "through_field_id": 61994, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "duration_format": null, + "through_field_id": 9187, "through_field_name": "Maintenance & Call Logs", - "target_field_id": 61984, + "target_field_id": 9177, "target_field_name": "Performed By" } ], "views": [ { - "id": 23894, + "id": 3956, "type": "grid", "name": "All Equipment", "order": 1, @@ -2245,8 +2245,8 @@ "row_height_size": "small", "field_options": [ { - "id": 222497, - "field_id": 61988, + "id": 33397, + "field_id": 9181, "width": 200, "hidden": false, "order": 32767, @@ -2254,8 +2254,8 @@ "aggregation_raw_type": "" }, { - "id": 222498, - "field_id": 61989, + "id": 33398, + "field_id": 9182, "width": 200, "hidden": false, "order": 32767, @@ -2263,8 +2263,8 @@ "aggregation_raw_type": "" }, { - "id": 222499, - "field_id": 61990, + "id": 33399, + "field_id": 9183, "width": 200, "hidden": false, "order": 32767, @@ -2272,8 +2272,8 @@ "aggregation_raw_type": "" }, { - "id": 222500, - "field_id": 61991, + "id": 33400, + "field_id": 9184, "width": 200, "hidden": false, "order": 32767, @@ -2281,8 +2281,8 @@ "aggregation_raw_type": "" }, { - "id": 222501, - "field_id": 61992, + "id": 33401, + "field_id": 9185, "width": 200, "hidden": false, "order": 32767, @@ -2290,8 +2290,8 @@ "aggregation_raw_type": "" }, { - "id": 222502, - "field_id": 61993, + "id": 33402, + "field_id": 9186, "width": 200, "hidden": false, "order": 32767, @@ -2299,8 +2299,8 @@ "aggregation_raw_type": "" }, { - "id": 222503, - "field_id": 61994, + "id": 33403, + "field_id": 9187, "width": 200, "hidden": false, "order": 32767, @@ -2308,8 +2308,8 @@ "aggregation_raw_type": "" }, { - "id": 222507, - "field_id": 61995, + "id": 33404, + "field_id": 9188, "width": 200, "hidden": false, "order": 32767, @@ -2317,8 +2317,8 @@ "aggregation_raw_type": "" }, { - "id": 222508, - "field_id": 61996, + "id": 33405, + "field_id": 9189, "width": 200, "hidden": false, "order": 32767, @@ -2326,8 +2326,8 @@ "aggregation_raw_type": "" }, { - "id": 222504, - "field_id": 62004, + "id": 33406, + "field_id": 9198, "width": 200, "hidden": false, "order": 32767, @@ -2335,8 +2335,8 @@ "aggregation_raw_type": "" }, { - "id": 222506, - "field_id": 62005, + "id": 33407, + "field_id": 9199, "width": 200, "hidden": false, "order": 32767, @@ -2344,8 +2344,8 @@ "aggregation_raw_type": "" }, { - "id": 222509, - "field_id": 62006, + "id": 33408, + "field_id": 9200, "width": 200, "hidden": false, "order": 32767, @@ -2353,8 +2353,8 @@ "aggregation_raw_type": "" }, { - "id": 222505, - "field_id": 62011, + "id": 33409, + "field_id": 9205, "width": 200, "hidden": false, "order": 32767, @@ -2364,7 +2364,7 @@ ] }, { - "id": 23895, + "id": 3957, "type": "grid", "name": "Equipments with active logs", "order": 2, @@ -2374,8 +2374,8 @@ "filters_disabled": false, "filters": [ { - "id": 14550, - "field_id": 61994, + "id": 2088, + "field_id": 9187, "type": "not_empty", "value": "", "group": null @@ -2390,8 +2390,8 @@ "row_height_size": "small", "field_options": [ { - "id": 222510, - "field_id": 61988, + "id": 33410, + "field_id": 9181, "width": 200, "hidden": false, "order": 32767, @@ -2399,8 +2399,8 @@ "aggregation_raw_type": "" }, { - "id": 222511, - "field_id": 61989, + "id": 33411, + "field_id": 9182, "width": 200, "hidden": false, "order": 32767, @@ -2408,8 +2408,8 @@ "aggregation_raw_type": "" }, { - "id": 222512, - "field_id": 61990, + "id": 33412, + "field_id": 9183, "width": 200, "hidden": false, "order": 32767, @@ -2417,8 +2417,8 @@ "aggregation_raw_type": "" }, { - "id": 222513, - "field_id": 61991, + "id": 33413, + "field_id": 9184, "width": 200, "hidden": false, "order": 32767, @@ -2426,8 +2426,8 @@ "aggregation_raw_type": "" }, { - "id": 222514, - "field_id": 61992, + "id": 33414, + "field_id": 9185, "width": 200, "hidden": false, "order": 32767, @@ -2435,8 +2435,8 @@ "aggregation_raw_type": "" }, { - "id": 222515, - "field_id": 61993, + "id": 33415, + "field_id": 9186, "width": 200, "hidden": false, "order": 32767, @@ -2444,8 +2444,8 @@ "aggregation_raw_type": "" }, { - "id": 222516, - "field_id": 61994, + "id": 33416, + "field_id": 9187, "width": 239, "hidden": false, "order": 32767, @@ -2453,8 +2453,8 @@ "aggregation_raw_type": "" }, { - "id": 222520, - "field_id": 61995, + "id": 33417, + "field_id": 9188, "width": 200, "hidden": false, "order": 32767, @@ -2462,8 +2462,8 @@ "aggregation_raw_type": "" }, { - "id": 222521, - "field_id": 61996, + "id": 33418, + "field_id": 9189, "width": 200, "hidden": false, "order": 32767, @@ -2471,8 +2471,8 @@ "aggregation_raw_type": "" }, { - "id": 222517, - "field_id": 62004, + "id": 33419, + "field_id": 9198, "width": 200, "hidden": false, "order": 32767, @@ -2480,8 +2480,8 @@ "aggregation_raw_type": "" }, { - "id": 222519, - "field_id": 62005, + "id": 33420, + "field_id": 9199, "width": 200, "hidden": false, "order": 32767, @@ -2489,8 +2489,8 @@ "aggregation_raw_type": "" }, { - "id": 222522, - "field_id": 62006, + "id": 33421, + "field_id": 9200, "width": 200, "hidden": false, "order": 32767, @@ -2498,8 +2498,8 @@ "aggregation_raw_type": "" }, { - "id": 222518, - "field_id": 62011, + "id": 33422, + "field_id": 9205, "width": 200, "hidden": false, "order": 32767, @@ -2509,7 +2509,7 @@ ] }, { - "id": 23898, + "id": 3958, "type": "grid", "name": "Needs Attention Today", "order": 3, @@ -2519,8 +2519,8 @@ "filters_disabled": false, "filters": [ { - "id": 14551, - "field_id": 62004, + "id": 2089, + "field_id": 9198, "type": "date_is_on_or_before", "value": "Europe/London??today", "group": null @@ -2535,8 +2535,8 @@ "row_height_size": "small", "field_options": [ { - "id": 222523, - "field_id": 61988, + "id": 33423, + "field_id": 9181, "width": 200, "hidden": false, "order": 32767, @@ -2544,8 +2544,8 @@ "aggregation_raw_type": "" }, { - "id": 222524, - "field_id": 61989, + "id": 33424, + "field_id": 9182, "width": 200, "hidden": false, "order": 32767, @@ -2553,8 +2553,8 @@ "aggregation_raw_type": "" }, { - "id": 222525, - "field_id": 61990, + "id": 33425, + "field_id": 9183, "width": 200, "hidden": false, "order": 32767, @@ -2562,8 +2562,8 @@ "aggregation_raw_type": "" }, { - "id": 222526, - "field_id": 61991, + "id": 33426, + "field_id": 9184, "width": 200, "hidden": false, "order": 32767, @@ -2571,8 +2571,8 @@ "aggregation_raw_type": "" }, { - "id": 222527, - "field_id": 61992, + "id": 33427, + "field_id": 9185, "width": 200, "hidden": false, "order": 32767, @@ -2580,8 +2580,8 @@ "aggregation_raw_type": "" }, { - "id": 222528, - "field_id": 61993, + "id": 33428, + "field_id": 9186, "width": 200, "hidden": false, "order": 32767, @@ -2589,8 +2589,8 @@ "aggregation_raw_type": "" }, { - "id": 222529, - "field_id": 61994, + "id": 33429, + "field_id": 9187, "width": 200, "hidden": false, "order": 32767, @@ -2598,8 +2598,8 @@ "aggregation_raw_type": "" }, { - "id": 222530, - "field_id": 62004, + "id": 33430, + "field_id": 9198, "width": 200, "hidden": false, "order": 32767, @@ -2607,8 +2607,8 @@ "aggregation_raw_type": "" }, { - "id": 222532, - "field_id": 62005, + "id": 33431, + "field_id": 9199, "width": 200, "hidden": false, "order": 32767, @@ -2616,8 +2616,8 @@ "aggregation_raw_type": "" }, { - "id": 222531, - "field_id": 62011, + "id": 33432, + "field_id": 9205, "width": 200, "hidden": false, "order": 32767, @@ -2627,7 +2627,7 @@ ] }, { - "id": 23896, + "id": 3959, "type": "calendar", "name": "Calibration Schedule", "order": 4, @@ -2640,72 +2640,72 @@ "sortings": [], "decorations": [], "public": false, - "date_field_id": 62004, + "date_field_id": 9198, "field_options": [ { - "id": 15540, - "field_id": 61988, + "id": 1719, + "field_id": 9181, "hidden": false, "order": 32767 }, { - "id": 15541, - "field_id": 61989, + "id": 1720, + "field_id": 9182, "hidden": true, "order": 32767 }, { - "id": 15542, - "field_id": 61990, + "id": 1721, + "field_id": 9183, "hidden": true, "order": 32767 }, { - "id": 15543, - "field_id": 61991, + "id": 1722, + "field_id": 9184, "hidden": true, "order": 32767 }, { - "id": 15544, - "field_id": 61992, + "id": 1723, + "field_id": 9185, "hidden": true, "order": 32767 }, { - "id": 15545, - "field_id": 61993, + "id": 1724, + "field_id": 9186, "hidden": true, "order": 32767 }, { - "id": 15546, - "field_id": 61994, + "id": 1725, + "field_id": 9187, "hidden": true, "order": 32767 }, { - "id": 15547, - "field_id": 62004, + "id": 1726, + "field_id": 9198, "hidden": true, "order": 32767 }, { - "id": 15549, - "field_id": 62005, + "id": 1727, + "field_id": 9199, "hidden": true, "order": 32767 }, { - "id": 15548, - "field_id": 62011, + "id": 1728, + "field_id": 9205, "hidden": true, "order": 32767 } ] }, { - "id": 23897, + "id": 3960, "type": "kanban", "name": "Equipments by Location", "order": 5, @@ -2718,72 +2718,72 @@ "sortings": [], "decorations": [], "public": false, - "single_select_field_id": 61990, + "single_select_field_id": 9183, "field_options": [ { - "id": 30419, - "field_id": 61988, + "id": 4756, + "field_id": 9181, "hidden": false, "order": 32767 }, { - "id": 30420, - "field_id": 61989, + "id": 4757, + "field_id": 9182, "hidden": false, "order": 32767 }, { - "id": 30421, - "field_id": 61990, + "id": 4758, + "field_id": 9183, "hidden": false, "order": 32767 }, { - "id": 30422, - "field_id": 61991, + "id": 4759, + "field_id": 9184, "hidden": true, "order": 32767 }, { - "id": 30423, - "field_id": 61992, + "id": 4760, + "field_id": 9185, "hidden": true, "order": 32767 }, { - "id": 30424, - "field_id": 61993, + "id": 4761, + "field_id": 9186, "hidden": true, "order": 32767 }, { - "id": 30425, - "field_id": 61994, + "id": 4762, + "field_id": 9187, "hidden": true, "order": 32767 }, { - "id": 30426, - "field_id": 62004, + "id": 4763, + "field_id": 9198, "hidden": true, "order": 32767 }, { - "id": 30428, - "field_id": 62005, + "id": 4764, + "field_id": 9199, "hidden": true, "order": 32767 }, { - "id": 30427, - "field_id": 62011, + "id": 4765, + "field_id": 9205, "hidden": true, "order": 32767 } ] }, { - "id": 23893, + "id": 3961, "type": "form", "name": "New Equipment Intake", "order": 6, @@ -2800,8 +2800,8 @@ "submit_action_redirect_url": "", "field_options": [ { - "id": 28841, - "field_id": 61989, + "id": 3529, + "field_id": 9182, "name": "Model", "description": "", "enabled": true, @@ -2816,8 +2816,8 @@ "allowed_select_options": [] }, { - "id": 28842, - "field_id": 61990, + "id": 3530, + "field_id": 9183, "name": "Location", "description": "", "enabled": true, @@ -2832,8 +2832,8 @@ "allowed_select_options": [] }, { - "id": 28843, - "field_id": 61991, + "id": 3531, + "field_id": 9184, "name": "Status", "description": "", "enabled": true, @@ -2848,8 +2848,8 @@ "allowed_select_options": [] }, { - "id": 28844, - "field_id": 61992, + "id": 3532, + "field_id": 9185, "name": "Calibration Interval (Days)", "description": "", "enabled": true, @@ -2864,8 +2864,8 @@ "allowed_select_options": [] }, { - "id": 28845, - "field_id": 61993, + "id": 3533, + "field_id": 9186, "name": "Last Calibration Date", "description": "", "enabled": true, @@ -2880,8 +2880,8 @@ "allowed_select_options": [] }, { - "id": 28846, - "field_id": 61988, + "id": 3534, + "field_id": 9181, "name": "", "description": "", "enabled": false, @@ -2896,8 +2896,8 @@ "allowed_select_options": [] }, { - "id": 28847, - "field_id": 61994, + "id": 3535, + "field_id": 9187, "name": "", "description": "", "enabled": false, @@ -2912,8 +2912,8 @@ "allowed_select_options": [] }, { - "id": 28851, - "field_id": 61995, + "id": 3536, + "field_id": 9188, "name": "", "description": "", "enabled": true, @@ -2928,8 +2928,8 @@ "allowed_select_options": [] }, { - "id": 28852, - "field_id": 61996, + "id": 3537, + "field_id": 9189, "name": "", "description": "", "enabled": true, @@ -2944,8 +2944,8 @@ "allowed_select_options": [] }, { - "id": 28848, - "field_id": 62004, + "id": 3538, + "field_id": 9198, "name": "", "description": "", "enabled": false, @@ -2960,8 +2960,8 @@ "allowed_select_options": [] }, { - "id": 28850, - "field_id": 62005, + "id": 3539, + "field_id": 9199, "name": "", "description": "", "enabled": false, @@ -2976,8 +2976,8 @@ "allowed_select_options": [] }, { - "id": 28853, - "field_id": 62006, + "id": 3540, + "field_id": 9200, "name": "", "description": "", "enabled": false, @@ -2992,8 +2992,8 @@ "allowed_select_options": [] }, { - "id": 28849, - "field_id": 62011, + "id": 3541, + "field_id": 9205, "name": "", "description": "", "enabled": false, @@ -3017,224 +3017,224 @@ "created_on": "2026-02-11T15:05:58.640415+00:00", "updated_on": "2026-02-20T09:16:00.715033+00:00", "last_modified_by": "frederik@baserow.io", - "field_61988": null, - "field_61989": "X100", - "field_61990": 24366, - "field_61991": 24372, - "field_61992": "180", - "field_61993": "2023-06-15", - "field_61994": [ + "field_9181": null, + "field_9182": "X100", + "field_9183": 3559, + "field_9184": 3565, + "field_9185": "180", + "field_9186": "2023-06-15", + "field_9187": [ 1 ], - "field_62004": null, - "field_62011": null, - "field_62005": null, - "field_61995": "2025-12-31", - "field_61996": [], - "field_62006": null + "field_9198": null, + "field_9205": null, + "field_9199": null, + "field_9188": "2025-12-31", + "field_9189": [], + "field_9200": null }, { "id": 2, "order": "2.00000000000000000000", "created_on": "2026-02-11T15:05:58.640487+00:00", "updated_on": "2026-02-11T16:26:40.289652+00:00", - "field_61988": null, - "field_61989": "X200", - "field_61990": 24367, - "field_61991": 24370, - "field_61992": "365", - "field_61993": "2025-12-01", - "field_61994": [ + "field_9181": null, + "field_9182": "X200", + "field_9183": 3560, + "field_9184": 3563, + "field_9185": "365", + "field_9186": "2025-12-01", + "field_9187": [ 2 ], - "field_62004": null, - "field_62011": null, - "field_62005": null, - "field_61995": "2026-01-15", - "field_61996": [], - "field_62006": null + "field_9198": null, + "field_9205": null, + "field_9199": null, + "field_9188": "2026-01-15", + "field_9189": [], + "field_9200": null }, { "id": 3, "order": "3.00000000000000000000", "created_on": "2026-02-11T15:05:58.640511+00:00", "updated_on": "2026-02-11T16:26:40.289679+00:00", - "field_61988": null, - "field_61989": "Y300", - "field_61990": 24368, - "field_61991": 24371, - "field_61992": "90", - "field_61993": "2023-09-10", - "field_61994": [ + "field_9181": null, + "field_9182": "Y300", + "field_9183": 3561, + "field_9184": 3564, + "field_9185": "90", + "field_9186": "2023-09-10", + "field_9187": [ 3 ], - "field_62004": null, - "field_62011": null, - "field_62005": null, - "field_61995": "2025-11-30", - "field_61996": [], - "field_62006": null + "field_9198": null, + "field_9205": null, + "field_9199": null, + "field_9188": "2025-11-30", + "field_9189": [], + "field_9200": null }, { "id": 4, "order": "4.00000000000000000000", "created_on": "2026-02-11T15:05:58.640532+00:00", "updated_on": "2026-02-11T16:26:40.289698+00:00", - "field_61988": null, - "field_61989": "Z400", - "field_61990": 24366, - "field_61991": 24372, - "field_61992": "180", - "field_61993": "2023-01-20", - "field_61994": [ + "field_9181": null, + "field_9182": "Z400", + "field_9183": 3559, + "field_9184": 3565, + "field_9185": "180", + "field_9186": "2023-01-20", + "field_9187": [ 4, 12 ], - "field_62004": null, - "field_62011": null, - "field_62005": null, - "field_61995": "2024-06-30", - "field_61996": [], - "field_62006": null + "field_9198": null, + "field_9205": null, + "field_9199": null, + "field_9188": "2024-06-30", + "field_9189": [], + "field_9200": null }, { "id": 5, "order": "5.00000000000000000000", "created_on": "2026-02-11T15:05:58.640568+00:00", "updated_on": "2026-02-11T16:26:40.289716+00:00", - "field_61988": null, - "field_61989": "X150", - "field_61990": 24367, - "field_61991": 24369, - "field_61992": "180", - "field_61993": "2023-07-05", - "field_61994": [ + "field_9181": null, + "field_9182": "X150", + "field_9183": 3560, + "field_9184": 3562, + "field_9185": "180", + "field_9186": "2023-07-05", + "field_9187": [ 5 ], - "field_62004": null, - "field_62011": null, - "field_62005": null, - "field_61995": "2025-09-15", - "field_61996": [], - "field_62006": null + "field_9198": null, + "field_9205": null, + "field_9199": null, + "field_9188": "2025-09-15", + "field_9189": [], + "field_9200": null }, { "id": 6, "order": "6.00000000000000000000", "created_on": "2026-02-11T15:05:58.640588+00:00", "updated_on": "2026-02-11T16:26:40.289734+00:00", - "field_61988": null, - "field_61989": "Y350", - "field_61990": 24368, - "field_61991": 24369, - "field_61992": "120", - "field_61993": "2023-05-30", - "field_61994": [ + "field_9181": null, + "field_9182": "Y350", + "field_9183": 3561, + "field_9184": 3562, + "field_9185": "120", + "field_9186": "2023-05-30", + "field_9187": [ 6 ], - "field_62004": null, - "field_62011": null, - "field_62005": null, - "field_61995": "2025-08-01", - "field_61996": [], - "field_62006": null + "field_9198": null, + "field_9205": null, + "field_9199": null, + "field_9188": "2025-08-01", + "field_9189": [], + "field_9200": null }, { "id": 7, "order": "7.00000000000000000000", "created_on": "2026-02-11T15:05:58.640609+00:00", "updated_on": "2026-02-11T16:26:40.289751+00:00", - "field_61988": null, - "field_61989": "Z410", - "field_61990": 24366, - "field_61991": 24370, - "field_61992": "365", - "field_61993": "2025-11-11", - "field_61994": [ + "field_9181": null, + "field_9182": "Z410", + "field_9183": 3559, + "field_9184": 3563, + "field_9185": "365", + "field_9186": "2025-11-11", + "field_9187": [ 7 ], - "field_62004": null, - "field_62011": null, - "field_62005": null, - "field_61995": "2026-02-28", - "field_61996": [], - "field_62006": null + "field_9198": null, + "field_9205": null, + "field_9199": null, + "field_9188": "2026-02-28", + "field_9189": [], + "field_9200": null }, { "id": 8, "order": "8.00000000000000000000", "created_on": "2026-02-11T15:05:58.640628+00:00", "updated_on": "2026-02-11T16:26:40.289780+00:00", - "field_61988": null, - "field_61989": "X210", - "field_61990": 24367, - "field_61991": 24371, - "field_61992": "90", - "field_61993": "2023-08-22", - "field_61994": [ + "field_9181": null, + "field_9182": "X210", + "field_9183": 3560, + "field_9184": 3564, + "field_9185": "90", + "field_9186": "2023-08-22", + "field_9187": [ 8 ], - "field_62004": null, - "field_62011": null, - "field_62005": null, - "field_61995": "2025-07-20", - "field_61996": [], - "field_62006": null + "field_9198": null, + "field_9205": null, + "field_9199": null, + "field_9188": "2025-07-20", + "field_9189": [], + "field_9200": null }, { "id": 9, "order": "9.00000000000000000000", "created_on": "2026-02-11T15:05:58.640648+00:00", "updated_on": "2026-02-11T16:26:40.289797+00:00", - "field_61988": null, - "field_61989": "Y320", - "field_61990": 24368, - "field_61991": 24369, - "field_61992": "180", - "field_61993": "2023-03-14", - "field_61994": [ + "field_9181": null, + "field_9182": "Y320", + "field_9183": 3561, + "field_9184": 3562, + "field_9185": "180", + "field_9186": "2023-03-14", + "field_9187": [ 9 ], - "field_62004": null, - "field_62011": null, - "field_62005": null, - "field_61995": "2025-10-10", - "field_61996": [], - "field_62006": null + "field_9198": null, + "field_9205": null, + "field_9199": null, + "field_9188": "2025-10-10", + "field_9189": [], + "field_9200": null }, { "id": 10, "order": "10.00000000000000000000", "created_on": "2026-02-11T15:05:58.640668+00:00", "updated_on": "2026-02-11T16:26:40.289814+00:00", - "field_61988": null, - "field_61989": "Z420", - "field_61990": 24366, - "field_61991": 24372, - "field_61992": "365", - "field_61993": "2025-10-05", - "field_61994": [ + "field_9181": null, + "field_9182": "Z420", + "field_9183": 3559, + "field_9184": 3565, + "field_9185": "365", + "field_9186": "2025-10-05", + "field_9187": [ 10, 11 ], - "field_62004": null, - "field_62011": null, - "field_62005": null, - "field_61995": "2024-12-01", - "field_61996": [], - "field_62006": null + "field_9198": null, + "field_9205": null, + "field_9199": null, + "field_9188": "2024-12-01", + "field_9189": [], + "field_9200": null } ], "data_sync": null, "field_rules": [] }, { - "id": 5760, + "id": 919, "name": "Inspector", "order": 3, "fields": [ { - "id": 61997, + "id": 9190, "type": "text", "name": "Full Name", "description": null, @@ -3248,7 +3248,7 @@ "text_default": "" }, { - "id": 61998, + "id": 9191, "type": "link_row", "name": "Assigned Logs", "description": null, @@ -3259,14 +3259,14 @@ "immutable_type": false, "immutable_properties": false, "field_constraints": [], - "link_row_table_id": 5758, - "link_row_related_field_id": 61984, + "link_row_table_id": 917, + "link_row_related_field_id": 9177, "link_row_limit_selection_view_id": null, "has_related_field": true, "link_row_multiple_relationships": true }, { - "id": 61999, + "id": 9192, "type": "text", "name": "Email", "description": null, @@ -3280,7 +3280,7 @@ "text_default": "" }, { - "id": 62000, + "id": 9193, "type": "multiple_select", "name": "Specialty", "description": null, @@ -3293,19 +3293,19 @@ "field_constraints": [], "select_options": [ { - "id": 24373, + "id": 3566, "value": "Radiology Systems", "color": "blue", "order": 0 }, { - "id": 24374, + "id": 3567, "value": "Precision Milling", "color": "green", "order": 1 }, { - "id": 24375, + "id": 3568, "value": "Electrical Safety", "color": "orange", "order": 2 @@ -3314,7 +3314,7 @@ "multiple_select_default": null }, { - "id": 62001, + "id": 9194, "type": "single_select", "name": "Role", "description": null, @@ -3327,19 +3327,19 @@ "field_constraints": [], "select_options": [ { - "id": 24376, + "id": 3569, "value": "Field Tech", "color": "blue", "order": 0 }, { - "id": 24377, + "id": 3570, "value": "Senior Auditor", "color": "green", "order": 1 }, { - "id": 24378, + "id": 3571, "value": "System Admin", "color": "red", "order": 2 @@ -3348,7 +3348,7 @@ "single_select_default": null }, { - "id": 62007, + "id": 9201, "type": "formula", "name": "Active Tasks", "description": null, @@ -3359,24 +3359,24 @@ "immutable_type": false, "immutable_properties": false, "field_constraints": [], - "date_format": null, "number_decimal_places": 0, - "duration_format": null, + "number_suffix": "", "date_time_format": null, + "date_show_tzinfo": null, + "number_separator": "", "date_include_time": null, - "number_suffix": "", - "number_prefix": "", - "date_force_timezone": null, "array_formula_type": null, "error": null, - "date_show_tzinfo": null, - "number_separator": "", "nullable": false, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "duration_format": null, "formula": "count(filter(lookup('Assigned Logs', 'Status'), lookup('Assigned Logs', 'Status') != 'Completed'))", "formula_type": "number" }, { - "id": 62002, + "id": 9195, "type": "password", "name": "Password", "description": null, @@ -3390,7 +3390,7 @@ "allow_endpoint_authentication": true }, { - "id": 62008, + "id": 9202, "type": "formula", "name": "Submit Log URL", "description": null, @@ -3401,24 +3401,24 @@ "immutable_type": false, "immutable_properties": false, "field_constraints": [], - "date_format": null, "number_decimal_places": null, - "duration_format": null, + "number_suffix": "", "date_time_format": null, + "date_show_tzinfo": null, + "number_separator": "", "date_include_time": null, - "number_suffix": "", - "number_prefix": "", - "date_force_timezone": null, "array_formula_type": null, "error": null, - "date_show_tzinfo": null, - "number_separator": "", "nullable": false, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "duration_format": null, "formula": "concat(field('Share Form URL'), field('Full Name'))", "formula_type": "text" }, { - "id": 62260, + "id": 9196, "type": "formula", "name": "Share Form URL", "description": null, @@ -3429,26 +3429,26 @@ "immutable_type": false, "immutable_properties": false, "field_constraints": [], - "date_format": null, "number_decimal_places": null, - "duration_format": null, + "number_suffix": "", "date_time_format": null, + "date_show_tzinfo": null, + "number_separator": "", "date_include_time": null, - "number_suffix": "", - "number_prefix": "", - "date_force_timezone": null, "array_formula_type": null, "error": null, - "date_show_tzinfo": null, - "number_separator": "", "nullable": false, + "date_format": null, + "number_prefix": "", + "date_force_timezone": null, + "duration_format": null, "formula": "tourl(\"https://baserow.cloudron.getbaserow.com/form/BQ2Rfr5LJVwaUM6bb0ryYhhXIVdOHTxojpgoyjtVUmQ?prefill_Performed By=\")", "formula_type": "url" } ], "views": [ { - "id": 23900, + "id": 3962, "type": "grid", "name": "Technician Directory", "order": 1, @@ -3460,8 +3460,8 @@ "filter_groups": [], "sortings": [ { - "id": 15928, - "field_id": 61997, + "id": 2642, + "field_id": 9190, "order": "ASC" } ], @@ -3472,8 +3472,8 @@ "row_height_size": "small", "field_options": [ { - "id": 222533, - "field_id": 61997, + "id": 33433, + "field_id": 9190, "width": 200, "hidden": false, "order": 0, @@ -3481,8 +3481,8 @@ "aggregation_raw_type": "" }, { - "id": 222534, - "field_id": 61999, + "id": 33434, + "field_id": 9192, "width": 200, "hidden": false, "order": 1, @@ -3490,8 +3490,8 @@ "aggregation_raw_type": "" }, { - "id": 222535, - "field_id": 62002, + "id": 33435, + "field_id": 9195, "width": 200, "hidden": false, "order": 2, @@ -3499,8 +3499,8 @@ "aggregation_raw_type": "" }, { - "id": 222536, - "field_id": 61998, + "id": 33436, + "field_id": 9191, "width": 200, "hidden": false, "order": 3, @@ -3508,8 +3508,8 @@ "aggregation_raw_type": "" }, { - "id": 222537, - "field_id": 62000, + "id": 33437, + "field_id": 9193, "width": 200, "hidden": false, "order": 4, @@ -3517,8 +3517,8 @@ "aggregation_raw_type": "" }, { - "id": 222538, - "field_id": 62001, + "id": 33438, + "field_id": 9194, "width": 200, "hidden": false, "order": 5, @@ -3526,8 +3526,8 @@ "aggregation_raw_type": "" }, { - "id": 222539, - "field_id": 62007, + "id": 33439, + "field_id": 9201, "width": 200, "hidden": false, "order": 6, @@ -3535,8 +3535,8 @@ "aggregation_raw_type": "" }, { - "id": 222540, - "field_id": 62008, + "id": 33441, + "field_id": 9196, "width": 200, "hidden": true, "order": 32767, @@ -3544,8 +3544,8 @@ "aggregation_raw_type": "" }, { - "id": 223112, - "field_id": 62260, + "id": 33440, + "field_id": 9202, "width": 200, "hidden": true, "order": 32767, @@ -3555,7 +3555,7 @@ ] }, { - "id": 23899, + "id": 3963, "type": "form", "name": "Staff Onboarding", "order": 2, @@ -3572,8 +3572,8 @@ "submit_action_redirect_url": "", "field_options": [ { - "id": 28854, - "field_id": 61997, + "id": 3542, + "field_id": 9190, "name": "", "description": "", "enabled": true, @@ -3588,8 +3588,8 @@ "allowed_select_options": [] }, { - "id": 28855, - "field_id": 61999, + "id": 3543, + "field_id": 9192, "name": "Email", "description": "", "enabled": true, @@ -3604,8 +3604,8 @@ "allowed_select_options": [] }, { - "id": 28856, - "field_id": 62000, + "id": 3544, + "field_id": 9193, "name": "Specialty", "description": "", "enabled": true, @@ -3620,8 +3620,8 @@ "allowed_select_options": [] }, { - "id": 28857, - "field_id": 61998, + "id": 3545, + "field_id": 9191, "name": "", "description": "", "enabled": false, @@ -3636,8 +3636,8 @@ "allowed_select_options": [] }, { - "id": 28858, - "field_id": 62001, + "id": 3546, + "field_id": 9194, "name": "", "description": "", "enabled": false, @@ -3652,8 +3652,8 @@ "allowed_select_options": [] }, { - "id": 28859, - "field_id": 62007, + "id": 3547, + "field_id": 9201, "name": "", "description": "", "enabled": false, @@ -3668,8 +3668,8 @@ "allowed_select_options": [] }, { - "id": 28860, - "field_id": 62002, + "id": 3548, + "field_id": 9195, "name": "", "description": "", "enabled": false, @@ -3684,8 +3684,8 @@ "allowed_select_options": [] }, { - "id": 28861, - "field_id": 62008, + "id": 3550, + "field_id": 9196, "name": "", "description": "", "enabled": false, @@ -3700,8 +3700,8 @@ "allowed_select_options": [] }, { - "id": 29053, - "field_id": 62260, + "id": 3549, + "field_id": 9202, "name": "", "description": "", "enabled": false, @@ -3718,7 +3718,7 @@ ] }, { - "id": 23901, + "id": 3964, "type": "gallery", "name": "Workload Overview", "order": 3, @@ -3733,38 +3733,38 @@ "public": false, "field_options": [ { - "id": 19191, - "field_id": 61997, + "id": 3120, + "field_id": 9190, "hidden": false, "order": 32767 }, { - "id": 19192, - "field_id": 61998, + "id": 3121, + "field_id": 9191, "hidden": false, "order": 32767 }, { - "id": 19193, - "field_id": 61999, + "id": 3122, + "field_id": 9192, "hidden": false, "order": 32767 }, { - "id": 19194, - "field_id": 62000, + "id": 3123, + "field_id": 9193, "hidden": true, "order": 32767 }, { - "id": 19195, - "field_id": 62001, + "id": 3124, + "field_id": 9194, "hidden": true, "order": 32767 }, { - "id": 19196, - "field_id": 62007, + "id": 3125, + "field_id": 9201, "hidden": true, "order": 32767 } @@ -3778,19 +3778,19 @@ "created_on": "2026-02-11T15:07:08.317079+00:00", "updated_on": "2026-02-20T08:44:22.067508+00:00", "last_modified_by": "frederik@baserow.io", - "field_61997": "Alice Smith", - "field_61998": [ + "field_9190": "Alice Smith", + "field_9191": [ 4 ], - "field_61999": "alice.smith@example.com", - "field_62000": [ - 24373 + "field_9192": "alice.smith@example.com", + "field_9193": [ + 3566 ], - "field_62001": 24376, - "field_62007": null, - "field_62002": "pbkdf2_sha256$720000$shfTJs9SC9jQTjAOJIvozo$SLEywujOwBgcSCN2G5NL49DSStAHjT3ljIR3B2jfsNI=", - "field_62008": null, - "field_62260": null + "field_9194": 3569, + "field_9201": null, + "field_9195": "pbkdf2_sha256$720000$shfTJs9SC9jQTjAOJIvozo$SLEywujOwBgcSCN2G5NL49DSStAHjT3ljIR3B2jfsNI=", + "field_9202": null, + "field_9196": null }, { "id": 2, @@ -3798,20 +3798,20 @@ "created_on": "2026-02-11T15:07:08.317134+00:00", "updated_on": "2026-02-20T08:44:23.701806+00:00", "last_modified_by": "frederik@baserow.io", - "field_61997": "Bob Johnson", - "field_61998": [ + "field_9190": "Bob Johnson", + "field_9191": [ 6, 12 ], - "field_61999": "bob.johnson@example.com", - "field_62000": [ - 24374 + "field_9192": "bob.johnson@example.com", + "field_9193": [ + 3567 ], - "field_62001": 24377, - "field_62007": null, - "field_62002": "pbkdf2_sha256$720000$TB7KyAjXiqKHao12LGghnk$NoOp4AsbGoFY+MqDjVgbgfToMoj7rGPeFMdQs70VRHY=", - "field_62008": null, - "field_62260": null + "field_9194": 3570, + "field_9201": null, + "field_9195": "pbkdf2_sha256$720000$TB7KyAjXiqKHao12LGghnk$NoOp4AsbGoFY+MqDjVgbgfToMoj7rGPeFMdQs70VRHY=", + "field_9202": null, + "field_9196": null }, { "id": 3, @@ -3819,20 +3819,20 @@ "created_on": "2026-02-11T15:07:08.317150+00:00", "updated_on": "2026-02-20T08:44:28.541630+00:00", "last_modified_by": "frederik@baserow.io", - "field_61997": "Carol Davis", - "field_61998": [ + "field_9190": "Carol Davis", + "field_9191": [ 1, 11 ], - "field_61999": "carol.davis@example.com", - "field_62000": [ - 24375 + "field_9192": "carol.davis@example.com", + "field_9193": [ + 3568 ], - "field_62001": 24378, - "field_62007": null, - "field_62002": "pbkdf2_sha256$720000$WLr7rsF2FHwy9YUBE4dp0z$Kw9sLHXkZ9Uop1toIIQCuFwThtdBFQFENzi4CJt4uqs=", - "field_62008": null, - "field_62260": null + "field_9194": 3571, + "field_9201": null, + "field_9195": "pbkdf2_sha256$720000$WLr7rsF2FHwy9YUBE4dp0z$Kw9sLHXkZ9Uop1toIIQCuFwThtdBFQFENzi4CJt4uqs=", + "field_9202": null, + "field_9196": null }, { "id": 4, @@ -3840,20 +3840,20 @@ "created_on": "2026-02-11T15:07:08.317164+00:00", "updated_on": "2026-02-20T08:44:30.426784+00:00", "last_modified_by": "frederik@baserow.io", - "field_61997": "David Lee", - "field_61998": [ + "field_9190": "David Lee", + "field_9191": [ 9 ], - "field_61999": "david.lee@example.com", - "field_62000": [ - 24373, - 24374 + "field_9192": "david.lee@example.com", + "field_9193": [ + 3566, + 3567 ], - "field_62001": 24376, - "field_62007": null, - "field_62002": "pbkdf2_sha256$720000$FQNin2RDbbBLD5SmZWsTMh$yutAlbdZuxW+9F5Zf5H7o56zAA9EkKzNFCe+mS4fGmI=", - "field_62008": null, - "field_62260": null + "field_9194": 3569, + "field_9201": null, + "field_9195": "pbkdf2_sha256$720000$FQNin2RDbbBLD5SmZWsTMh$yutAlbdZuxW+9F5Zf5H7o56zAA9EkKzNFCe+mS4fGmI=", + "field_9202": null, + "field_9196": null }, { "id": 5, @@ -3861,21 +3861,21 @@ "created_on": "2026-02-11T15:07:08.317177+00:00", "updated_on": "2026-02-20T08:44:32.061895+00:00", "last_modified_by": "frederik@baserow.io", - "field_61997": "Eva Martinez", - "field_61998": [ + "field_9190": "Eva Martinez", + "field_9191": [ 3, 10 ], - "field_61999": "eva.martinez@example.com", - "field_62000": [ - 24374, - 24375 + "field_9192": "eva.martinez@example.com", + "field_9193": [ + 3567, + 3568 ], - "field_62001": 24377, - "field_62007": null, - "field_62002": "pbkdf2_sha256$720000$q83wB7u3BtaeW1svMT5prC$olwnkYYYnE1nrU6SdnrDtIIH6xq4YI1F6fjgY3QxV04=", - "field_62008": null, - "field_62260": null + "field_9194": 3570, + "field_9201": null, + "field_9195": "pbkdf2_sha256$720000$q83wB7u3BtaeW1svMT5prC$olwnkYYYnE1nrU6SdnrDtIIH6xq4YI1F6fjgY3QxV04=", + "field_9202": null, + "field_9196": null }, { "id": 6, @@ -3883,19 +3883,19 @@ "created_on": "2026-02-11T15:07:08.317192+00:00", "updated_on": "2026-02-20T08:44:33.673180+00:00", "last_modified_by": "frederik@baserow.io", - "field_61997": "Frank Wilson", - "field_61998": [ + "field_9190": "Frank Wilson", + "field_9191": [ 7 ], - "field_61999": "frank.wilson@example.com", - "field_62000": [ - 24373 + "field_9192": "frank.wilson@example.com", + "field_9193": [ + 3566 ], - "field_62001": 24378, - "field_62007": null, - "field_62002": "pbkdf2_sha256$720000$kniIGA1Mvor6VvWkjCKFgR$lCNdXCqTZUcl7ckhyyNDrIDIRA52XCPbU4Zwc9CqmPE=", - "field_62008": null, - "field_62260": null + "field_9194": 3571, + "field_9201": null, + "field_9195": "pbkdf2_sha256$720000$kniIGA1Mvor6VvWkjCKFgR$lCNdXCqTZUcl7ckhyyNDrIDIRA52XCPbU4Zwc9CqmPE=", + "field_9202": null, + "field_9196": null }, { "id": 7, @@ -3903,20 +3903,20 @@ "created_on": "2026-02-11T15:07:08.317206+00:00", "updated_on": "2026-02-20T08:44:35.218078+00:00", "last_modified_by": "frederik@baserow.io", - "field_61997": "Grace Kim", - "field_61998": [ + "field_9190": "Grace Kim", + "field_9191": [ 2, 8 ], - "field_61999": "grace.kim@example.com", - "field_62000": [ - 24375 + "field_9192": "grace.kim@example.com", + "field_9193": [ + 3568 ], - "field_62001": 24376, - "field_62007": null, - "field_62002": "pbkdf2_sha256$720000$LLOum4lh1thafbIjqyYFNu$sLZr5JB3MX4Bk2G56X/It8J6XzwW3bAvZ21rZfddsFo=", - "field_62008": null, - "field_62260": null + "field_9194": 3569, + "field_9201": null, + "field_9195": "pbkdf2_sha256$720000$LLOum4lh1thafbIjqyYFNu$sLZr5JB3MX4Bk2G56X/It8J6XzwW3bAvZ21rZfddsFo=", + "field_9202": null, + "field_9196": null }, { "id": 8, @@ -3924,20 +3924,20 @@ "created_on": "2026-02-11T15:07:08.317219+00:00", "updated_on": "2026-02-20T08:44:36.620389+00:00", "last_modified_by": "frederik@baserow.io", - "field_61997": "Henry Patel", - "field_61998": [ + "field_9190": "Henry Patel", + "field_9191": [ 5 ], - "field_61999": "henry.patel@example.com", - "field_62000": [ - 24373, - 24375 + "field_9192": "henry.patel@example.com", + "field_9193": [ + 3566, + 3568 ], - "field_62001": 24377, - "field_62007": null, - "field_62002": "pbkdf2_sha256$720000$7AjZtBFlXKXnbJbNmzqqSz$WDq8bJlQsfqRETTY1wPBV8IV5q926nLSwuuz2bEjG6Q=", - "field_62008": null, - "field_62260": null + "field_9194": 3570, + "field_9201": null, + "field_9195": "pbkdf2_sha256$720000$7AjZtBFlXKXnbJbNmzqqSz$WDq8bJlQsfqRETTY1wPBV8IV5q926nLSwuuz2bEjG6Q=", + "field_9202": null, + "field_9196": null } ], "data_sync": null, @@ -3948,7 +3948,7 @@ { "pages": [ { - "id": 16645, + "id": 635, "name": "__shared__", "order": 1, "path": "__shared__", @@ -3957,10 +3957,10 @@ "shared": true, "elements": [ { - "id": 324882, + "id": 9242, "order": "0.25000000000000000000", "type": "image", - "parent_element_id": 324881, + "parent_element_id": 9241, "place_in_container": null, "css_classes": "", "visibility": "all", @@ -4002,7 +4002,7 @@ "style_width_child": "normal", "image_source_type": "upload", "image_file_id": { - "name": "wghpZn3GLKnVbOtpXiLqzWqSsFLm4SDT_d7ef7916a9670e53534a7ddbad00c947500715ef956ae215d8a876dbb4b50cf0.png", + "name": "9Nymb8CnGOfxK58862gbzWgaecoKqao9_d7ef7916a9670e53534a7ddbad00c947500715ef956ae215d8a876dbb4b50cf0.png", "original_name": "Screenshot 2026-02-12 at 14.27.56.png" }, "image_url": { @@ -4017,10 +4017,10 @@ } }, { - "id": 324883, + "id": 9243, "order": "0.28571428571428569843", "type": "text", - "parent_element_id": 324881, + "parent_element_id": 9241, "place_in_container": null, "css_classes": "", "visibility": "logged-in", @@ -4069,7 +4069,7 @@ "format": "plain" }, { - "id": 324881, + "id": 9241, "order": "1.00000000000000000000", "type": "header", "parent_element_id": null, @@ -4112,10 +4112,10 @@ "pages": [] }, { - "id": 324884, + "id": 9244, "order": "3.00000000000000000000", "type": "menu", - "parent_element_id": 324881, + "parent_element_id": 9241, "place_in_container": null, "css_classes": "", "visibility": "logged-in", @@ -4188,14 +4188,14 @@ "alignment": "left", "menu_items": [ { - "id": 107523, + "id": 1147, "variant": "link", "type": "link", "menu_item_order": 0, - "uid": "1a5465d4-261b-4d03-bd19-72d611f74073", + "uid": "d2db0249-3ff7-4e74-8f6f-4ff83c157d71", "name": "My Workspace", "navigation_type": "page", - "navigate_to_page_id": 16647, + "navigate_to_page_id": 637, "navigate_to_url": { "mode": "simple", "version": "0.1", @@ -4217,11 +4217,11 @@ "children": [] }, { - "id": 107524, + "id": 1148, "variant": "link", "type": "separator", "menu_item_order": 1, - "uid": "36429606-63f8-4b47-b62a-b8e9fa68930f", + "uid": "0762f4a4-94c0-4f0c-95c6-63d6f7508029", "name": "Page", "navigation_type": "page", "navigate_to_page_id": null, @@ -4237,14 +4237,14 @@ "children": [] }, { - "id": 107525, + "id": 1149, "variant": "link", "type": "link", "menu_item_order": 2, - "uid": "2fe71db7-d4ce-4733-a6b5-3ccee0920e78", + "uid": "9065dbe6-1021-43d4-99b4-0ac4768589f1", "name": "All Equipments", "navigation_type": "page", - "navigate_to_page_id": 16648, + "navigate_to_page_id": 638, "navigate_to_url": { "mode": "simple", "version": "0.1", @@ -4266,11 +4266,11 @@ "children": [] }, { - "id": 107526, + "id": 1150, "variant": "link", "type": "separator", "menu_item_order": 3, - "uid": "ffdc93fc-4fb8-48d8-9b42-c3ff8b149016", + "uid": "4d78ca85-db49-429b-80c6-bad2f85e8881", "name": "Page 2", "navigation_type": "page", "navigate_to_page_id": null, @@ -4286,11 +4286,11 @@ "children": [] }, { - "id": 107527, + "id": 1151, "variant": "link", "type": "spacer", "menu_item_order": 4, - "uid": "0efc82a7-0b40-4550-a5e6-cb5c69097b66", + "uid": "17873e8e-b9a6-4b02-afb4-a1229c825d2f", "name": "Page 1", "navigation_type": "page", "navigate_to_page_id": null, @@ -4306,11 +4306,11 @@ "children": [] }, { - "id": 107528, + "id": 1152, "variant": "link", "type": "button", "menu_item_order": 5, - "uid": "0b9458d1-0ec6-4091-bc11-3aa183a1b22c", + "uid": "365e4137-4609-483f-88bc-87a1c1c52aac", "name": "Logout", "navigation_type": "page", "navigate_to_page_id": null, @@ -4330,16 +4330,16 @@ ], "data_sources": [ { - "id": 45226, + "id": 1277, "name": "Technician Profile", "order": "1.00000000000000000000", "service": { - "id": 56940, - "integration_id": 1196, + "id": 2167, + "integration_id": 221, "type": "local_baserow_get_row", "sample_data": null, - "table_id": 5760, - "view_id": 23900, + "table_id": 919, + "view_id": 3962, "search_query": { "mode": "simple", "version": "0.1", @@ -4355,16 +4355,16 @@ } }, { - "id": 45227, + "id": 1278, "name": "All Technicians", "order": "2.00000000000000000000", "service": { - "id": 56941, - "integration_id": 1196, + "id": 2168, + "integration_id": 221, "type": "local_baserow_list_rows", "sample_data": null, - "table_id": 5760, - "view_id": 23900, + "table_id": 919, + "view_id": 3962, "sortings": [], "search_query": { "mode": "simple", @@ -4379,12 +4379,12 @@ ], "workflow_actions": [ { - "id": 34285, + "id": 1311, "type": "logout", "order": 1, - "page_id": 16645, - "element_id": 324884, - "event": "0b9458d1-0ec6-4091-bc11-3aa183a1b22c_click" + "page_id": 635, + "element_id": 9244, + "event": "365e4137-4609-483f-88bc-87a1c1c52aac_click" } ], "visibility": "all", @@ -4392,7 +4392,7 @@ "roles": [] }, { - "id": 16646, + "id": 636, "name": "Login", "order": 1, "path": "/login", @@ -4401,7 +4401,7 @@ "shared": false, "elements": [ { - "id": 324885, + "id": 9245, "order": "0.50000000000000000000", "type": "heading", "parent_element_id": null, @@ -4452,7 +4452,7 @@ "level": 1 }, { - "id": 324886, + "id": 9246, "order": "1.00000000000000000000", "type": "auth_form", "parent_element_id": null, @@ -4496,7 +4496,7 @@ "style_background_mode": "fill", "style_width": "small", "style_width_child": "normal", - "user_source_id": 807, + "user_source_id": 66, "login_button_label": { "mode": "simple", "version": "0.1", @@ -4507,23 +4507,23 @@ "data_sources": [], "workflow_actions": [ { - "id": 34286, + "id": 1312, "type": "refresh_data_source", "order": 1, - "page_id": 16646, - "element_id": 324886, + "page_id": 636, + "element_id": 9246, "event": "after_login", - "data_source_id": 45226 + "data_source_id": 1277 }, { - "id": 34287, + "id": 1313, "type": "open_page", "order": 2, - "page_id": 16646, - "element_id": 324886, + "page_id": 636, + "element_id": 9246, "event": "after_login", "navigation_type": "page", - "navigate_to_page_id": 16647, + "navigate_to_page_id": 637, "page_parameters": [], "query_parameters": [ { @@ -4548,7 +4548,7 @@ "roles": [] }, { - "id": 16647, + "id": 637, "name": "Inspector Workspace", "order": 2, "path": "/", @@ -4562,10 +4562,10 @@ "shared": false, "elements": [ { - "id": 324888, + "id": 9248, "order": "1.00000000000000000000", "type": "input_text", - "parent_element_id": 324887, + "parent_element_id": 9247, "place_in_container": null, "css_classes": "", "visibility": "all", @@ -4623,7 +4623,7 @@ "input_type": "text" }, { - "id": 324889, + "id": 9249, "order": "1.00000000000000000000", "type": "heading", "parent_element_id": null, @@ -4670,7 +4670,7 @@ "level": 2 }, { - "id": 324887, + "id": 9247, "order": "1.50000000000000000000", "type": "form_container", "parent_element_id": null, @@ -4717,7 +4717,7 @@ "reset_initial_values_post_submission": false }, { - "id": 324890, + "id": 9250, "order": "1.55555555555555558023", "type": "button", "parent_element_id": null, @@ -4772,7 +4772,7 @@ } }, { - "id": 324891, + "id": 9251, "order": "1.60000000000000008882", "type": "heading", "parent_element_id": null, @@ -4819,7 +4819,7 @@ "level": 3 }, { - "id": 324892, + "id": 9252, "order": "1.62500000000000000000", "type": "table", "parent_element_id": null, @@ -4858,7 +4858,7 @@ "style_background_mode": "fill", "style_width": "normal", "style_width_child": "normal", - "data_source_id": 45228, + "data_source_id": 1279, "items_per_page": 20, "button_load_more_label": { "mode": "simple", @@ -4869,7 +4869,7 @@ "property_options": [], "fields": [ { - "uid": "646299cf-e4ba-4846-a12e-61afcca97d27", + "uid": "14aa66df-81bf-4aad-ab9b-4e7f725d46d4", "name": "Log Type", "type": "text", "styles": {}, @@ -4877,12 +4877,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61975')" + "formula": "get('current_record.field_9168')" } } }, { - "uid": "cb426bf2-6454-4051-81b8-ecf6116cb5d4", + "uid": "bf18564b-e4c4-4946-83da-c403cb63a320", "name": "Log Type", "type": "text", "styles": {}, @@ -4890,12 +4890,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61977.value')" + "formula": "get('current_record.field_9170.value')" } } }, { - "uid": "dcbf397f-ba97-4e19-9426-92bbeba9da1f", + "uid": "7e5ec72e-babc-40ba-8c51-5809aab287fe", "name": "Target Value", "type": "text", "styles": {}, @@ -4903,12 +4903,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61978')" + "formula": "get('current_record.field_9171')" } } }, { - "uid": "4a620a2e-9bd1-418b-86b2-72efc2759865", + "uid": "07956c7c-dda8-4098-b166-8d92f11fea56", "name": "Observed Value", "type": "text", "styles": {}, @@ -4916,12 +4916,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61979')" + "formula": "get('current_record.field_9172')" } } }, { - "uid": "5e0ec783-a6f1-4bd8-940f-b7d3b42e9864", + "uid": "bed70ef3-a83d-4c66-bfa7-4a9e541d7134", "name": "Tolerance Limit", "type": "text", "styles": {}, @@ -4929,12 +4929,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61980')" + "formula": "get('current_record.field_9173')" } } }, { - "uid": "4861ef3d-2712-4be8-8e3e-cbaf68fdc20e", + "uid": "0d14795f-2717-4f2e-8465-f8714f2f7283", "name": "Status", "type": "tags", "styles": {}, @@ -4942,18 +4942,18 @@ "values": { "mode": "simple", "version": "0.1", - "formula": "concat('','\n',get('current_record.field_61981.value'))" + "formula": "concat('','\n',get('current_record.field_9174.value'))" }, "colors_is_formula": true, "colors": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61981.color')" + "formula": "get('current_record.field_9174.color')" } } }, { - "uid": "33c29426-9af9-45cd-8edb-64aed350cd77", + "uid": "4569e92a-57f3-416c-a877-1aa7996a8c8f", "name": "Priority", "type": "rating", "styles": {}, @@ -4961,7 +4961,7 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61982')" + "formula": "get('current_record.field_9175')" }, "color": "primary", "rating_style": "star", @@ -4969,7 +4969,7 @@ } }, { - "uid": "932cfcc1-90ca-4679-a46b-f3411b5fc00a", + "uid": "ef9d2449-8e44-4185-85e1-e9d4b84925aa", "name": "Within Tolerance?", "type": "boolean", "styles": {}, @@ -4977,12 +4977,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61985')" + "formula": "get('current_record.field_9178')" } } }, { - "uid": "fa0a6767-4bdf-49d9-a9b0-70658aed5834", + "uid": "0dd21e10-f20f-4a96-b7af-956043a18560", "name": "Failure Reason", "type": "text", "styles": {}, @@ -4990,12 +4990,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61986')" + "formula": "get('current_record.field_9179')" } } }, { - "uid": "5af69d09-969d-4794-b1c9-b2ee1e96b114", + "uid": "e4aa56d7-7a18-4ef7-b449-b4e262a3d59b", "name": "Date", "type": "text", "styles": {}, @@ -5003,7 +5003,7 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61987')" + "formula": "get('current_record.field_9180')" } } } @@ -5015,7 +5015,7 @@ } }, { - "id": 324893, + "id": 9253, "order": "1.66666666666666674068", "type": "heading", "parent_element_id": null, @@ -5062,7 +5062,7 @@ "level": 3 }, { - "id": 324894, + "id": 9254, "order": "1.71428571428571419055", "type": "table", "parent_element_id": null, @@ -5101,7 +5101,7 @@ "style_background_mode": "fill", "style_width": "normal", "style_width_child": "normal", - "data_source_id": 45229, + "data_source_id": 1280, "items_per_page": 20, "button_load_more_label": { "mode": "simple", @@ -5112,7 +5112,7 @@ "property_options": [], "fields": [ { - "uid": "a32dbfbd-0d99-4c10-b9cf-d289737f56a5", + "uid": "b9ab6351-e679-4f84-97a3-1f5c7283c7f7", "name": "Model", "type": "text", "styles": {}, @@ -5120,12 +5120,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61989')" + "formula": "get('current_record.field_9182')" } } }, { - "uid": "a7c8f645-02a1-4ac2-bd50-6e1495350edb", + "uid": "c7ca7210-28e5-424b-8814-4a4e9baeb9ff", "name": "Location", "type": "text", "styles": {}, @@ -5133,12 +5133,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61990.value')" + "formula": "get('current_record.field_9183.value')" } } }, { - "uid": "2ab5c042-5127-4adb-a1fd-eef521ace737", + "uid": "0194b4e3-f1c9-490e-9a5b-4a12e873649d", "name": "Status", "type": "tags", "styles": {}, @@ -5146,18 +5146,18 @@ "values": { "mode": "simple", "version": "0.1", - "formula": "concat('','\n',get('current_record.field_61991.value'))" + "formula": "concat('','\n',get('current_record.field_9184.value'))" }, "colors_is_formula": true, "colors": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61991.color')" + "formula": "get('current_record.field_9184.color')" } } }, { - "uid": "478e438f-2f9b-420a-8471-66c63bb12bd3", + "uid": "94316f17-1caf-497d-b12d-44c20536796e", "name": "Calibration Interval (Days)", "type": "text", "styles": {}, @@ -5165,12 +5165,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61992')" + "formula": "get('current_record.field_9185')" } } }, { - "uid": "0bf00997-2e06-40d6-963f-a4561a0531a9", + "uid": "357ffcb6-e2ae-466d-b400-8b1ddbf759fd", "name": "Last Calibration Date", "type": "text", "styles": {}, @@ -5178,12 +5178,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61993')" + "formula": "get('current_record.field_9186')" } } }, { - "uid": "010d9739-171c-4e7a-a3b1-8a43876f5947", + "uid": "f3009a68-1b4f-4414-932a-20e339986cb1", "name": "Warranty Expiry", "type": "text", "styles": {}, @@ -5191,12 +5191,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61995')" + "formula": "get('current_record.field_9188')" } } }, { - "uid": "554e848c-f93c-4866-bf11-9ec824f174cc", + "uid": "df8be14c-916c-472c-b82c-b673c6a96d9b", "name": "Performed By", "type": "text", "styles": {}, @@ -5204,7 +5204,7 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_62006.*.value')" + "formula": "get('current_record.field_9200.*.value')" } } } @@ -5216,7 +5216,7 @@ } }, { - "id": 324895, + "id": 9255, "order": "2.00000000000000000000", "type": "heading", "parent_element_id": null, @@ -5263,7 +5263,7 @@ "level": 3 }, { - "id": 324896, + "id": 9256, "order": "3.00000000000000000000", "type": "table", "parent_element_id": null, @@ -5302,7 +5302,7 @@ "style_background_mode": "fill", "style_width": "normal", "style_width_child": "normal", - "data_source_id": 45230, + "data_source_id": 1281, "items_per_page": 20, "button_load_more_label": { "mode": "simple", @@ -5313,7 +5313,7 @@ "property_options": [], "fields": [ { - "uid": "fd83723f-c65a-41a6-9af6-d3ae011a5982", + "uid": "0c40dbf3-a9d8-472f-9b94-c220bd4e244e", "name": "Equipment", "type": "text", "styles": {}, @@ -5321,12 +5321,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61976.*.value')" + "formula": "get('current_record.field_9169.*.value')" } } }, { - "uid": "1b1d75fd-4b7a-4c3a-acc8-5f5112431447", + "uid": "5b0bd3aa-3b2b-432f-9293-12bd8f1fca83", "name": "Log Type", "type": "tags", "styles": {}, @@ -5334,18 +5334,18 @@ "values": { "mode": "simple", "version": "0.1", - "formula": "concat('','\n',get('current_record.field_61977.value'))" + "formula": "concat('','\n',get('current_record.field_9170.value'))" }, "colors_is_formula": true, "colors": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61977.color')" + "formula": "get('current_record.field_9170.color')" } } }, { - "uid": "22292e9e-b402-4a51-94ab-e076a7e7a887", + "uid": "02d5dd68-719e-4c70-a14f-a18840cda8b4", "name": "Target Value", "type": "text", "styles": {}, @@ -5353,12 +5353,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61978')" + "formula": "get('current_record.field_9171')" } } }, { - "uid": "104c55c3-7690-4a61-ad95-31d1336ce64a", + "uid": "0274ec21-83df-4e57-b7cf-1a4e9b4b515c", "name": "Observed Value", "type": "text", "styles": {}, @@ -5366,12 +5366,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61979')" + "formula": "get('current_record.field_9172')" } } }, { - "uid": "c0adc9bd-5d98-43fd-b7a0-4d1e08624538", + "uid": "69144a8b-6e39-442e-8007-0f48bb0fb60d", "name": "Tolerance Limit", "type": "text", "styles": {}, @@ -5379,12 +5379,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61980')" + "formula": "get('current_record.field_9173')" } } }, { - "uid": "789261ab-8ca4-4b2a-b0ca-57fc9e2f6252", + "uid": "46211a2f-16a1-4786-ad78-8590562d209e", "name": "Status", "type": "tags", "styles": {}, @@ -5392,18 +5392,18 @@ "values": { "mode": "simple", "version": "0.1", - "formula": "concat('','\n',get('current_record.field_61981.value'))" + "formula": "concat('','\n',get('current_record.field_9174.value'))" }, "colors_is_formula": true, "colors": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61981.color')" + "formula": "get('current_record.field_9174.color')" } } }, { - "uid": "5538060f-f81a-4a02-a937-cc5e81447623", + "uid": "0e9f3bb1-56f0-4d7e-9ec8-5a9794fd71b7", "name": "Priority", "type": "rating", "styles": {}, @@ -5411,7 +5411,7 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61982')" + "formula": "get('current_record.field_9175')" }, "color": "primary", "rating_style": "star", @@ -5419,7 +5419,7 @@ } }, { - "uid": "efb04688-5b67-40db-ab65-52c4374ec659", + "uid": "70dd5a1f-531d-4708-bca9-27eb7e886edf", "name": "Performed By", "type": "text", "styles": {}, @@ -5427,12 +5427,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61984.*.value')" + "formula": "get('current_record.field_9177.*.value')" } } }, { - "uid": "16f75ee9-09d2-43a9-9b26-6e94164abff0", + "uid": "06f7fe26-7946-4e74-93dc-5963b2a6b476", "name": "Within Tolerance?", "type": "boolean", "styles": {}, @@ -5440,12 +5440,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61985')" + "formula": "get('current_record.field_9178')" } } }, { - "uid": "0392b7f2-db0d-44c9-89ff-dd429937638b", + "uid": "946e74db-4986-48e2-ba7b-95e48a913a2e", "name": "Failure Reason", "type": "text", "styles": {}, @@ -5453,12 +5453,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61986')" + "formula": "get('current_record.field_9179')" } } }, { - "uid": "c00cda27-9437-4573-89b7-205acb00170b", + "uid": "87f6350a-3302-457d-84da-8cbb126f91bd", "name": "Date", "type": "text", "styles": {}, @@ -5466,7 +5466,7 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61987')" + "formula": "get('current_record.field_9180')" } } } @@ -5480,16 +5480,16 @@ ], "data_sources": [ { - "id": 45228, + "id": 1279, "name": "My Active Logs", "order": "1.00000000000000000000", "service": { - "id": 56942, - "integration_id": 1196, + "id": 2169, + "integration_id": 221, "type": "local_baserow_list_rows", "sample_data": null, - "table_id": 5758, - "view_id": 23889, + "table_id": 917, + "view_id": 3951, "sortings": [], "search_query": { "mode": "simple", @@ -5499,7 +5499,7 @@ "filter_type": "AND", "filters": [ { - "field_id": 61984, + "field_id": 9177, "type": "link_row_has", "value": { "mode": "simple", @@ -5509,12 +5509,12 @@ "value_is_formula": true }, { - "field_id": 61981, + "field_id": 9174, "type": "single_select_equal", "value": { "mode": "raw", "version": "0.1", - "formula": "24364" + "formula": "3557" }, "value_is_formula": false } @@ -5523,16 +5523,16 @@ } }, { - "id": 45229, + "id": 1280, "name": "Machines Requiring Attention", "order": "2.00000000000000000000", "service": { - "id": 56943, - "integration_id": 1196, + "id": 2170, + "integration_id": 221, "type": "local_baserow_list_rows", "sample_data": null, - "table_id": 5759, - "view_id": 23894, + "table_id": 918, + "view_id": 3956, "sortings": [], "search_query": { "mode": "simple", @@ -5542,7 +5542,7 @@ "filter_type": "AND", "filters": [ { - "field_id": 62011, + "field_id": 9205, "type": "contains", "value": { "mode": "raw", @@ -5556,16 +5556,16 @@ } }, { - "id": 45230, + "id": 1281, "name": "Critical Failures", "order": "3.00000000000000000000", "service": { - "id": 56944, - "integration_id": 1196, + "id": 2171, + "integration_id": 221, "type": "local_baserow_list_rows", "sample_data": null, - "table_id": 5758, - "view_id": 23889, + "table_id": 917, + "view_id": 3951, "sortings": [], "search_query": { "mode": "simple", @@ -5575,7 +5575,7 @@ "filter_type": "AND", "filters": [ { - "field_id": 62012, + "field_id": 9206, "type": "contains", "value": { "mode": "raw", @@ -5591,14 +5591,14 @@ ], "workflow_actions": [ { - "id": 34288, + "id": 1314, "type": "open_page", "order": 1, - "page_id": 16647, - "element_id": 324887, + "page_id": 637, + "element_id": 9247, "event": "submit", "navigation_type": "page", - "navigate_to_page_id": 16647, + "navigate_to_page_id": 637, "page_parameters": [], "query_parameters": [ { @@ -5606,7 +5606,7 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('form_data.324888')" + "formula": "get('form_data.9248')" } } ], @@ -5618,14 +5618,14 @@ "target": "self" }, { - "id": 34289, + "id": 1315, "type": "open_page", "order": 1, - "page_id": 16647, - "element_id": 324890, + "page_id": 637, + "element_id": 9250, "event": "click", "navigation_type": "page", - "navigate_to_page_id": 16647, + "navigate_to_page_id": 637, "page_parameters": [], "query_parameters": [ { @@ -5650,7 +5650,7 @@ "roles": [] }, { - "id": 16648, + "id": 638, "name": "All Equipments", "order": 3, "path": "/all-machines", @@ -5664,10 +5664,10 @@ "shared": false, "elements": [ { - "id": 324899, + "id": 9259, "order": "1.00000000000000000000", "type": "input_text", - "parent_element_id": 324898, + "parent_element_id": 9258, "place_in_container": null, "css_classes": "", "visibility": "all", @@ -5725,10 +5725,10 @@ "input_type": "text" }, { - "id": 324900, + "id": 9260, "order": "1.00000000000000000000", "type": "heading", - "parent_element_id": 324897, + "parent_element_id": 9257, "place_in_container": "0", "css_classes": "", "visibility": "all", @@ -5772,7 +5772,7 @@ "level": 2 }, { - "id": 324897, + "id": 9257, "order": "1.33333333333333325932", "type": "column", "parent_element_id": null, @@ -5816,7 +5816,7 @@ "alignment": "top" }, { - "id": 324898, + "id": 9258, "order": "1.50000000000000000000", "type": "form_container", "parent_element_id": null, @@ -5863,7 +5863,7 @@ "reset_initial_values_post_submission": false }, { - "id": 324901, + "id": 9261, "order": "1.62500000000000000000", "type": "button", "parent_element_id": null, @@ -5918,7 +5918,7 @@ } }, { - "id": 324902, + "id": 9262, "order": "1.66666666666666674068", "type": "heading", "parent_element_id": null, @@ -5965,7 +5965,7 @@ "level": 3 }, { - "id": 324903, + "id": 9263, "order": "1.71428571428571419055", "type": "table", "parent_element_id": null, @@ -6004,7 +6004,7 @@ "style_background_mode": "fill", "style_width": "normal", "style_width_child": "normal", - "data_source_id": 45232, + "data_source_id": 1283, "items_per_page": 20, "button_load_more_label": { "mode": "simple", @@ -6015,7 +6015,7 @@ "property_options": [], "fields": [ { - "uid": "2c99530c-3eca-46bb-bf73-fcee4f58f099", + "uid": "ed3e64a9-17fb-4208-9cda-6bb4ddb88273", "name": "Model", "type": "text", "styles": {}, @@ -6023,12 +6023,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61989')" + "formula": "get('current_record.field_9182')" } } }, { - "uid": "c5f8ec26-0e1c-4817-a498-fdf0b8ffdd68", + "uid": "54275806-63e1-4542-be73-ce03890822b1", "name": "Location", "type": "text", "styles": {}, @@ -6036,12 +6036,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61990.value')" + "formula": "get('current_record.field_9183.value')" } } }, { - "uid": "a674fa3f-00cf-4329-9bab-5e0843311e0a", + "uid": "a8a777e4-caaa-4271-be29-10f67a1b2d26", "name": "Status", "type": "tags", "styles": {}, @@ -6049,18 +6049,18 @@ "values": { "mode": "simple", "version": "0.1", - "formula": "concat('','\n',get('current_record.field_61991.value'))" + "formula": "concat('','\n',get('current_record.field_9184.value'))" }, "colors_is_formula": true, "colors": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61991.color')" + "formula": "get('current_record.field_9184.color')" } } }, { - "uid": "903cbc20-0525-4841-824b-5d35a1098c7e", + "uid": "9172b834-f4a8-4213-b2aa-f34b3c3549ff", "name": "Calibration Interval (Days)", "type": "text", "styles": {}, @@ -6068,12 +6068,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61992')" + "formula": "get('current_record.field_9185')" } } }, { - "uid": "9979baac-9a67-433d-8e35-2d590617d7bc", + "uid": "ac6fd6c9-ebf8-4090-aa05-8339218d5817", "name": "Last Calibration Date", "type": "text", "styles": {}, @@ -6081,12 +6081,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61993')" + "formula": "get('current_record.field_9186')" } } }, { - "uid": "fcce959e-0bb7-4085-a15e-d916662fbe9a", + "uid": "b4a18ee7-3f2b-41b7-90bd-cb6b0947896e", "name": "Warranty Expiry", "type": "text", "styles": {}, @@ -6094,12 +6094,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61995')" + "formula": "get('current_record.field_9188')" } } }, { - "uid": "911b765c-0a7c-42c2-b073-a246ca517acb", + "uid": "f3de133a-1b45-4d12-ae45-d5ea234ecbe6", "name": "Performed By", "type": "text", "styles": {}, @@ -6107,7 +6107,7 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_62006.*.value')" + "formula": "get('current_record.field_9200.*.value')" } } } @@ -6119,7 +6119,7 @@ } }, { - "id": 324904, + "id": 9264, "order": "1.75000000000000000000", "type": "heading", "parent_element_id": null, @@ -6166,7 +6166,7 @@ "level": 3 }, { - "id": 324905, + "id": 9265, "order": "1.77777777777777767909", "type": "table", "parent_element_id": null, @@ -6205,7 +6205,7 @@ "style_background_mode": "fill", "style_width": "normal", "style_width_child": "normal", - "data_source_id": 45233, + "data_source_id": 1284, "items_per_page": 20, "button_load_more_label": { "mode": "simple", @@ -6216,7 +6216,7 @@ "property_options": [], "fields": [ { - "uid": "6b35a47e-9d19-4d77-b366-b997df932524", + "uid": "f64acc41-d575-42d4-92cf-cc139c089927", "name": "Model", "type": "text", "styles": {}, @@ -6224,12 +6224,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61989')" + "formula": "get('current_record.field_9182')" } } }, { - "uid": "8eae841d-61e8-43ba-a4fe-8cb987eb5305", + "uid": "333b42fd-27b2-4b8c-9f35-bfb073ce243d", "name": "Location", "type": "text", "styles": {}, @@ -6237,12 +6237,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61990.value')" + "formula": "get('current_record.field_9183.value')" } } }, { - "uid": "cabd5599-fd07-44e1-9083-44ff49e1f423", + "uid": "b1c87614-9044-495e-b143-4995a0e61109", "name": "Status", "type": "tags", "styles": {}, @@ -6250,18 +6250,18 @@ "values": { "mode": "simple", "version": "0.1", - "formula": "concat('','\n',get('current_record.field_61991.value'))" + "formula": "concat('','\n',get('current_record.field_9184.value'))" }, "colors_is_formula": true, "colors": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61991.color')" + "formula": "get('current_record.field_9184.color')" } } }, { - "uid": "bcd45198-c7fd-45e6-b00c-13a513967ade", + "uid": "8c2b8739-05e2-412c-bb74-8a80d4ad6fa9", "name": "Calibration Interval (Days)", "type": "text", "styles": {}, @@ -6269,12 +6269,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61992')" + "formula": "get('current_record.field_9185')" } } }, { - "uid": "3abb63ec-dc39-4c0c-bd82-457cd42f39c4", + "uid": "e4028307-3df8-4785-a22e-4526c9cba183", "name": "Last Calibration Date", "type": "text", "styles": {}, @@ -6282,12 +6282,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61993')" + "formula": "get('current_record.field_9186')" } } }, { - "uid": "99a7370a-2641-4830-97b8-14bd8663346f", + "uid": "74d32871-2598-4b15-82d0-3317492ce800", "name": "Warranty Expiry", "type": "text", "styles": {}, @@ -6295,12 +6295,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61995')" + "formula": "get('current_record.field_9188')" } } }, { - "uid": "818b2ea1-f7c4-42aa-8a61-1217a5215567", + "uid": "8f09215f-daf6-4f69-85e8-b5e197098bbe", "name": "Performed By", "type": "text", "styles": {}, @@ -6308,7 +6308,7 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_62006.*.value')" + "formula": "get('current_record.field_9200.*.value')" } } } @@ -6320,7 +6320,7 @@ } }, { - "id": 324906, + "id": 9266, "order": "1.80000000000000004441", "type": "heading", "parent_element_id": null, @@ -6367,7 +6367,7 @@ "level": 3 }, { - "id": 324907, + "id": 9267, "order": "1.81818181818181812126", "type": "table", "parent_element_id": null, @@ -6406,7 +6406,7 @@ "style_background_mode": "fill", "style_width": "normal", "style_width_child": "normal", - "data_source_id": 45234, + "data_source_id": 1285, "items_per_page": 20, "button_load_more_label": { "mode": "simple", @@ -6417,7 +6417,7 @@ "property_options": [], "fields": [ { - "uid": "98b8039d-cfe5-4d5d-8405-4f54b29cdb9d", + "uid": "cf1aab7c-986f-451d-a4c9-bc83ffe110b0", "name": "Model", "type": "text", "styles": {}, @@ -6425,12 +6425,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61989')" + "formula": "get('current_record.field_9182')" } } }, { - "uid": "041de37d-be79-49b1-8aac-0d55841ba3ed", + "uid": "3b33b3f3-27a5-4cca-9ea8-077339978507", "name": "Location", "type": "text", "styles": {}, @@ -6438,12 +6438,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61990.value')" + "formula": "get('current_record.field_9183.value')" } } }, { - "uid": "380dd6e3-82a3-4e89-88a3-4faf4bf5c5da", + "uid": "6a398cf1-3b93-49f5-ad5a-02df477d42ed", "name": "Status", "type": "tags", "styles": {}, @@ -6451,18 +6451,18 @@ "values": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61991.value')" + "formula": "get('current_record.field_9184.value')" }, "colors_is_formula": true, "colors": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61991.color')" + "formula": "get('current_record.field_9184.color')" } } }, { - "uid": "37cd604c-fe17-458c-aa39-0b5b1dc39542", + "uid": "009e81d8-ff02-4190-961f-505c2b692e84", "name": "Calibration Interval (Days)", "type": "text", "styles": {}, @@ -6470,12 +6470,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61992')" + "formula": "get('current_record.field_9185')" } } }, { - "uid": "e2fcb586-22c7-4fb7-b02d-ee83658a5efa", + "uid": "4a6f9175-fa71-4868-879e-9d7ea274bdad", "name": "Last Calibration Date", "type": "text", "styles": {}, @@ -6483,12 +6483,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61993')" + "formula": "get('current_record.field_9186')" } } }, { - "uid": "59daae9f-2db7-4625-912a-8d11255d3a30", + "uid": "697a2d95-9d83-4351-b4b7-d143e6b4cffb", "name": "Warranty Expiry", "type": "text", "styles": {}, @@ -6496,12 +6496,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61995')" + "formula": "get('current_record.field_9188')" } } }, { - "uid": "784a6d7b-9258-4931-8509-8d9a0b9ee5cb", + "uid": "cb014bc5-aa9e-428a-9b47-326e8ed29e5a", "name": "Performed By", "type": "text", "styles": {}, @@ -6509,7 +6509,7 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_62006.*.value')" + "formula": "get('current_record.field_9200.*.value')" } } } @@ -6521,7 +6521,7 @@ } }, { - "id": 324908, + "id": 9268, "order": "1.83333333333333325932", "type": "heading", "parent_element_id": null, @@ -6563,12 +6563,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "concat('All Equipments (',get('data_source.45235.result'),')')" + "formula": "concat('All Equipments (',get('data_source.1286.result'),')')" }, "level": 3 }, { - "id": 324909, + "id": 9269, "order": "2.00000000000000000000", "type": "table", "parent_element_id": null, @@ -6607,7 +6607,7 @@ "style_background_mode": "fill", "style_width": "normal", "style_width_child": "normal", - "data_source_id": 45231, + "data_source_id": 1282, "items_per_page": 20, "button_load_more_label": { "mode": "simple", @@ -6618,7 +6618,7 @@ "property_options": [], "fields": [ { - "uid": "d756a855-14eb-4f46-bc56-cbe9bd1ad702", + "uid": "8f40b8d8-3b03-4c6e-9afb-afddb2bdff6d", "name": "Model", "type": "text", "styles": {}, @@ -6626,12 +6626,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61989')" + "formula": "get('current_record.field_9182')" } } }, { - "uid": "5d49cd2b-e25a-47e3-a796-bee14127a955", + "uid": "f4e28b59-ce7b-41c6-bf7c-dd5b59aafe8c", "name": "Location", "type": "text", "styles": {}, @@ -6639,12 +6639,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61990.value')" + "formula": "get('current_record.field_9183.value')" } } }, { - "uid": "20fbb511-1cb6-4377-80a2-609e080fd3e3", + "uid": "f3cdce8e-de14-4701-9b2b-7cd0dbb10af8", "name": "Status", "type": "tags", "styles": {}, @@ -6652,18 +6652,18 @@ "values": { "mode": "simple", "version": "0.1", - "formula": "concat('','\n',get('current_record.field_61991.value'))" + "formula": "concat('','\n',get('current_record.field_9184.value'))" }, "colors_is_formula": true, "colors": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61991.color')" + "formula": "get('current_record.field_9184.color')" } } }, { - "uid": "43f5a3af-9673-4123-8f56-109f6aadd7a5", + "uid": "d20c69f7-a4a5-49f3-ab72-a04ff0ddd0a0", "name": "Calibration Interval (Days)", "type": "text", "styles": {}, @@ -6671,12 +6671,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61992')" + "formula": "get('current_record.field_9185')" } } }, { - "uid": "e6686931-653b-42f0-af81-84d0f408d692", + "uid": "60b8beca-1524-42c7-a9e0-790036e9ef97", "name": "Last Calibration Date", "type": "text", "styles": {}, @@ -6684,12 +6684,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61993')" + "formula": "get('current_record.field_9186')" } } }, { - "uid": "fcfbccd6-aebd-4023-a365-b680c2c863f0", + "uid": "cb6bf7da-4a36-4524-8cb1-f6b7ca3173f1", "name": "Warranty Expiry", "type": "text", "styles": {}, @@ -6697,12 +6697,12 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_61995')" + "formula": "get('current_record.field_9188')" } } }, { - "uid": "dfccd4c9-eb7d-42c4-ae2c-a875489670d9", + "uid": "a312693e-8e42-435b-bb63-c6c795e5cc9c", "name": "Performed By", "type": "text", "styles": {}, @@ -6710,7 +6710,7 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('current_record.field_62006.*.value')" + "formula": "get('current_record.field_9200.*.value')" } } } @@ -6724,16 +6724,16 @@ ], "data_sources": [ { - "id": 45231, + "id": 1282, "name": "All Equipment", "order": "1.00000000000000000000", "service": { - "id": 56945, - "integration_id": 1196, + "id": 2172, + "integration_id": 221, "type": "local_baserow_list_rows", "sample_data": null, - "table_id": 5759, - "view_id": 23894, + "table_id": 918, + "view_id": 3956, "sortings": [], "search_query": { "mode": "simple", @@ -6746,16 +6746,16 @@ } }, { - "id": 45232, + "id": 1283, "name": "Unassigned Equipments", "order": "2.00000000000000000000", "service": { - "id": 56946, - "integration_id": 1196, + "id": 2173, + "integration_id": 221, "type": "local_baserow_list_rows", "sample_data": null, - "table_id": 5759, - "view_id": 23894, + "table_id": 918, + "view_id": 3956, "sortings": [], "search_query": { "mode": "simple", @@ -6765,7 +6765,7 @@ "filter_type": "AND", "filters": [ { - "field_id": 62006, + "field_id": 9200, "type": "has_empty_value", "value": { "mode": "raw", @@ -6779,16 +6779,16 @@ } }, { - "id": 45233, + "id": 1284, "name": "Equipment with active logs", "order": "3.00000000000000000000", "service": { - "id": 56947, - "integration_id": 1196, + "id": 2174, + "integration_id": 221, "type": "local_baserow_list_rows", "sample_data": null, - "table_id": 5759, - "view_id": 23895, + "table_id": 918, + "view_id": 3957, "sortings": [], "search_query": { "mode": "simple", @@ -6801,16 +6801,16 @@ } }, { - "id": 45234, + "id": 1285, "name": "Machines in maintenance", "order": "4.00000000000000000000", "service": { - "id": 56948, - "integration_id": 1196, + "id": 2175, + "integration_id": 221, "type": "local_baserow_list_rows", "sample_data": null, - "table_id": 5759, - "view_id": 23894, + "table_id": 918, + "view_id": 3956, "sortings": [], "search_query": { "mode": "simple", @@ -6820,12 +6820,12 @@ "filter_type": "AND", "filters": [ { - "field_id": 61991, + "field_id": 9184, "type": "single_select_equal", "value": { "mode": "raw", "version": "0.1", - "formula": "24371" + "formula": "3564" }, "value_is_formula": false } @@ -6834,16 +6834,16 @@ } }, { - "id": 45235, + "id": 1286, "name": "Fleet Summary", "order": "5.00000000000000000000", "service": { - "id": 56949, - "integration_id": 1196, + "id": 2176, + "integration_id": 221, "type": "local_baserow_aggregate_rows", "sample_data": null, - "table_id": 5759, - "view_id": 23894, + "table_id": 918, + "view_id": 3956, "search_query": { "mode": "simple", "version": "0.1", @@ -6851,21 +6851,21 @@ }, "filter_type": "AND", "filters": [], - "field_id": 62011, + "field_id": 9205, "aggregation_type": "count" } } ], "workflow_actions": [ { - "id": 34290, + "id": 1316, "type": "open_page", "order": 1, - "page_id": 16648, - "element_id": 324898, + "page_id": 638, + "element_id": 9258, "event": "submit", "navigation_type": "page", - "navigate_to_page_id": 16648, + "navigate_to_page_id": 638, "page_parameters": [], "query_parameters": [ { @@ -6873,7 +6873,7 @@ "value": { "mode": "simple", "version": "0.1", - "formula": "get('form_data.324899')" + "formula": "get('form_data.9259')" } } ], @@ -6885,14 +6885,14 @@ "target": "self" }, { - "id": 34291, + "id": 1317, "type": "open_page", "order": 1, - "page_id": 16648, - "element_id": 324901, + "page_id": 638, + "element_id": 9261, "event": "click", "navigation_type": "page", - "navigate_to_page_id": 16648, + "navigate_to_page_id": 638, "page_parameters": [], "query_parameters": [ { @@ -6919,7 +6919,7 @@ ], "integrations": [ { - "id": 1196, + "id": 221, "name": "Local Baserow", "order": "1.00000000000000000000", "type": "local_baserow", @@ -7108,30 +7108,30 @@ }, "user_sources": [ { - "id": 807, + "id": 66, "name": "Technicians", "order": "1.00000000000000000000", "type": "local_baserow", - "uid": "807_5760_61999_62001", - "integration_id": 1196, + "uid": "66_919_9192_9194", + "integration_id": 221, "auth_providers": [ { - "id": 812, + "id": 66, "type": "local_baserow_password", "domain": null, "enabled": true, - "password_field_id": 62002 + "password_field_id": 9195 } ], - "table_id": 5760, - "email_field_id": 61999, - "name_field_id": 61997, - "role_field_id": 62001 + "table_id": 919, + "email_field_id": 9192, + "name_field_id": 9190, + "role_field_id": 9194 } ], "favicon_file": null, "login_page": { - "id": 16646, + "id": 636, "name": "Login", "order": 1, "path": "/login", @@ -7140,7 +7140,7 @@ "shared": false, "elements": [ { - "id": 324885, + "id": 9245, "order": "0.50000000000000000000", "type": "heading", "parent_element_id": null, @@ -7191,7 +7191,7 @@ "level": 1 }, { - "id": 324886, + "id": 9246, "order": "1.00000000000000000000", "type": "auth_form", "parent_element_id": null, @@ -7235,7 +7235,7 @@ "style_background_mode": "fill", "style_width": "small", "style_width_child": "normal", - "user_source_id": 807, + "user_source_id": 66, "login_button_label": { "mode": "simple", "version": "0.1", @@ -7246,23 +7246,23 @@ "data_sources": [], "workflow_actions": [ { - "id": 34286, + "id": 1312, "type": "refresh_data_source", "order": 1, - "page_id": 16646, - "element_id": 324886, + "page_id": 636, + "element_id": 9246, "event": "after_login", - "data_source_id": 45226 + "data_source_id": 1277 }, { - "id": 34287, + "id": 1313, "type": "open_page", "order": 2, - "page_id": 16646, - "element_id": 324886, + "page_id": 636, + "element_id": 9246, "event": "after_login", "navigation_type": "page", - "navigate_to_page_id": 16647, + "navigate_to_page_id": 637, "page_parameters": [], "query_parameters": [ { @@ -7286,7 +7286,7 @@ "role_type": "allow_all", "roles": [] }, - "id": 2167, + "id": 321, "name": "Field Inspector Portal", "order": 2, "type": "builder", @@ -7299,17 +7299,17 @@ { "workflows": [ { - "id": 172, + "id": 76, "name": "Escalation", "order": 2, "nodes": [ { - "id": 963, + "id": 391, "type": "local_baserow_rows_created", "label": "New inspection log", "service": { - "id": 60634, - "integration_id": 1197, + "id": 2177, + "integration_id": 222, "type": "local_baserow_rows_created", "sample_data": { "data": { @@ -7357,16 +7357,16 @@ "status": 200, "output_uid": "" }, - "table_id": 5758 + "table_id": 917 }, - "workflow_id": 172 + "workflow_id": 76 }, { - "id": 966, + "id": 392, "type": "router", "label": "Check emergency", "service": { - "id": 60637, + "id": 2178, "integration_id": null, "type": "router", "sample_data": { @@ -7381,25 +7381,25 @@ "edges": [ { "label": "Emergency protocal", - "uid": "e5c65edc-5c51-4cc5-8b54-9430104ccf9f", + "uid": "06b5fc27-f061-455c-b1d6-34104400fb3d", "condition": { "mode": "advanced", "version": "0.1", - "formula": "and(get('previous_node.963.0.field_62012') = 'IMMEDIATE ESCALATION', get('previous_node.963.0.field_61981.value') != 'Completed')" + "formula": "get('previous_node.391.0.field_9206')='IMMEDIATE ESCALATION'&&get('previous_node.391.0.field_9174.value')!='Completed'" } } ], "default_edge_label": "Standard alert" }, - "workflow_id": 172 + "workflow_id": 76 }, { - "id": 967, + "id": 393, "type": "local_baserow_update_row", "label": "", "service": { - "id": 60638, - "integration_id": 1197, + "id": 2179, + "integration_id": 222, "type": "local_baserow_upsert_row", "sample_data": { "data": { @@ -7513,15 +7513,15 @@ "status": 200, "output_uid": "" }, - "table_id": 5759, + "table_id": 918, "row_id": { "mode": "simple", "version": "0.1", - "formula": "get('previous_node.963.0.field_61976.0.id')" + "formula": "get('previous_node.391.0.field_9169.0.id')" }, "field_mappings": [ { - "field_id": 61991, + "field_id": 9184, "value": { "mode": "simple", "version": "0.1", @@ -7531,44 +7531,44 @@ } ] }, - "workflow_id": 172 + "workflow_id": 76 }, { - "id": 968, + "id": 394, "type": "slack_write_message", "label": "", "service": { - "id": 60639, - "integration_id": 1198, + "id": 2180, + "integration_id": 223, "type": "slack_write_message", "sample_data": null, "channel": "team", "text": { "mode": "simple", "version": "0.1", - "formula": "concat('\ud83d\udea8 CRITICAL SAFETY ALERT: ', '\n', concat(get('previous_node.967.field_61988'), ' at ', get('previous_node.967.field_61990.value'), ' failed calibrations. Result:'), '\n', concat(get('previous_node.963.0.field_61979'), ' vs Target: ', get('previous_node.963.0.field_61978')), '\n', 'Machine has been locked automatically')" + "formula": "concat('\ud83d\udea8 CRITICAL SAFETY ALERT: ','\n',concat(get('previous_node.393.field_9181'),' at ',get('previous_node.393.field_9183.value'),' failed calibrations. Result:'),'\n',concat(get('previous_node.391.0.field_9172'),' vs Target: ',get('previous_node.391.0.field_9171')),'\n','Machine has been locked automatically')" } }, - "workflow_id": 172 + "workflow_id": 76 }, { - "id": 969, + "id": 395, "type": "local_baserow_update_row", "label": "", "service": { - "id": 60640, - "integration_id": 1197, + "id": 2181, + "integration_id": 222, "type": "local_baserow_upsert_row", "sample_data": null, - "table_id": 5759, + "table_id": 918, "row_id": { "mode": "simple", "version": "0.1", - "formula": "get('previous_node.963.0.field_61976.0.id')" + "formula": "get('previous_node.391.0.field_9169.0.id')" }, "field_mappings": [ { - "field_id": 61993, + "field_id": 9186, "value": { "mode": "advanced", "version": "0.1", @@ -7578,15 +7578,15 @@ } ] }, - "workflow_id": 172 + "workflow_id": 76 }, { - "id": 970, + "id": 396, "type": "smtp_email", "label": "", "service": { - "id": 60641, - "integration_id": 1199, + "id": 2182, + "integration_id": 224, "type": "smtp_email", "sample_data": null, "from_email": { @@ -7602,7 +7602,7 @@ "to_emails": { "mode": "simple", "version": "0.1", - "formula": "get('previous_node.971.field_61999')" + "formula": "get('previous_node.397.field_9192')" }, "cc_emails": { "mode": "simple", @@ -7617,24 +7617,24 @@ "subject": { "mode": "simple", "version": "0.1", - "formula": "concat('Routine maintenance for ', get('previous_node.963.0.field_61976.0.value'), ' logged')" + "formula": "concat('Routine maintenance for ', get('previous_node.391.0.field_9169.0.value'), ' logged')" }, "body_type": "plain", "body": { "mode": "simple", "version": "0.1", - "formula": "concat('', '\n', concat('Routine maintenance for ', get('previous_node.963.0.field_61976.0.value'), ' logged'))" + "formula": "concat('', '\n', concat('Routine maintenance for ', get('previous_node.391.0.field_9169.0.value'), ' logged'))" } }, - "workflow_id": 172 + "workflow_id": 76 }, { - "id": 971, + "id": 397, "type": "local_baserow_get_row", "label": "Get inspector", "service": { - "id": 60642, - "integration_id": 1197, + "id": 2183, + "integration_id": 222, "type": "local_baserow_get_row", "sample_data": { "data": { @@ -7689,7 +7689,7 @@ "status": 200, "output_uid": "" }, - "table_id": 5760, + "table_id": 919, "view_id": null, "search_query": { "mode": "simple", @@ -7701,52 +7701,52 @@ "row_id": { "mode": "simple", "version": "0.1", - "formula": "get('previous_node.963.0.field_61984.0.id')" + "formula": "get('previous_node.391.0.field_9177.0.id')" } }, - "workflow_id": 172 + "workflow_id": 76 } ], "state": "draft", "graph": { - "0": 963, - "963": { + "0": 391, + "391": { "next": { "": [ - 971 + 397 ] } }, - "966": { + "392": { "next": { "": [ - 969 + 395 ], - "e5c65edc-5c51-4cc5-8b54-9430104ccf9f": [ - 967 + "06b5fc27-f061-455c-b1d6-34104400fb3d": [ + 393 ] } }, - "967": { + "393": { "next": { "": [ - 968 + 394 ] } }, - "968": {}, - "969": { + "394": {}, + "395": { "next": { "": [ - 970 + 396 ] } }, - "970": {}, - "971": { + "396": {}, + "397": { "next": { "": [ - 966 + 392 ] } } @@ -7755,21 +7755,21 @@ ], "integrations": [ { - "id": 1197, + "id": 222, "name": "Local Baserow", "order": "1.00000000000000000000", "type": "local_baserow", "authorized_user": null }, { - "id": 1198, + "id": 223, "name": "Slack Bot", "order": "2.00000000000000000000", "type": "slack_bot", "token": null }, { - "id": 1199, + "id": 224, "name": "SMTP Email", "order": "3.00000000000000000000", "type": "smtp", @@ -7780,7 +7780,7 @@ "password": null } ], - "id": 2168, + "id": 322, "name": "Inspection Workflows", "order": 3, "type": "automation" diff --git a/backend/templates/inspections-compliance.zip b/backend/templates/inspections-compliance.zip index d45be95d62..55fe87d0e8 100644 Binary files a/backend/templates/inspections-compliance.zip and b/backend/templates/inspections-compliance.zip differ diff --git a/backend/templates/intake-qualification.json b/backend/templates/intake-qualification.json index 5bb4372521..c349d98fa9 100644 --- a/backend/templates/intake-qualification.json +++ b/backend/templates/intake-qualification.json @@ -1,5 +1,5 @@ { - "baserow_template_version": 1, + "baserow_template_version": 2, "name": "Intake & Qualification Engine", "icon": "iconoir-check", "keywords": [ diff --git a/backend/templates/password-reset.json b/backend/templates/password-reset.json new file mode 100644 index 0000000000..360fa7aeb5 --- /dev/null +++ b/backend/templates/password-reset.json @@ -0,0 +1,3116 @@ +{ + "baserow_template_version": 1, + "name": "Password reset", + "icon": "iconoir-lock", + "keywords": [ + "password", + "magic link", + "forgot password" + ], + "categories": [ + "Baserow" + ], + "export": [ + { + "id": 2224, + "name": "Account information", + "order": 1, + "type": "database", + "tables": [ + { + "id": 5823, + "name": "Employees", + "order": 1, + "fields": [ + { + "id": 62714, + "type": "text", + "name": "Name", + "description": null, + "order": 0, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 62715, + "type": "email", + "name": "Email", + "description": null, + "order": 1, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [] + }, + { + "id": 62716, + "type": "phone_number", + "name": "Phone", + "description": null, + "order": 2, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [] + }, + { + "id": 62717, + "type": "file", + "name": "Picture", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [] + }, + { + "id": 62718, + "type": "single_select", + "name": "Job role", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "select_options": [ + { + "id": 24703, + "value": "Other", + "color": "light-brown", + "order": 0 + }, + { + "id": 24704, + "value": "Compliance Manager", + "color": "light-cyan", + "order": 1 + } + ], + "single_select_default": null + }, + { + "id": 62719, + "type": "password", + "name": "Password", + "description": null, + "order": 5, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "allow_endpoint_authentication": false + } + ], + "views": [ + { + "id": 24063, + "type": "grid", + "name": "All employees", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 224409, + "field_id": 62714, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 224410, + "field_id": 62715, + "width": 243, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 224411, + "field_id": 62716, + "width": 137, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 224412, + "field_id": 62717, + "width": 113, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 224413, + "field_id": 62718, + "width": 182, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 224414, + "field_id": 62719, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 24064, + "type": "grid", + "name": "Other employees", + "order": 2, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 14578, + "field_id": 62718, + "type": "single_select_equal", + "value": "24703", + "group": null + } + ], + "filter_groups": [], + "sortings": [ + { + "id": 15983, + "field_id": 62714, + "order": "ASC" + } + ], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 224415, + "field_id": 62714, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 224416, + "field_id": 62715, + "width": 243, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 224417, + "field_id": 62716, + "width": 137, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 224418, + "field_id": 62717, + "width": 113, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 224419, + "field_id": 62718, + "width": 182, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 224420, + "field_id": 62719, + "width": 200, + "hidden": true, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 24065, + "type": "grid", + "name": "Compliance managers", + "order": 3, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 14579, + "field_id": 62718, + "type": "single_select_equal", + "value": "24704", + "group": null + } + ], + "filter_groups": [], + "sortings": [ + { + "id": 15984, + "field_id": 62714, + "order": "ASC" + } + ], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 224421, + "field_id": 62714, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 224422, + "field_id": 62715, + "width": 243, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 224423, + "field_id": 62716, + "width": 137, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 224424, + "field_id": 62717, + "width": 113, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 224425, + "field_id": 62718, + "width": 182, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 224426, + "field_id": 62719, + "width": 200, + "hidden": true, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 24066, + "type": "gallery", + "name": "Gallery: All employees", + "order": 4, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "decorations": [], + "public": false, + "card_cover_image_field_id": 62717, + "field_options": [ + { + "id": 19260, + "field_id": 62714, + "hidden": false, + "order": 32767 + }, + { + "id": 19261, + "field_id": 62715, + "hidden": false, + "order": 32767 + }, + { + "id": 19262, + "field_id": 62716, + "hidden": false, + "order": 32767 + }, + { + "id": 19263, + "field_id": 62717, + "hidden": true, + "order": 32767 + }, + { + "id": 19264, + "field_id": 62718, + "hidden": true, + "order": 32767 + }, + { + "id": 19265, + "field_id": 62719, + "hidden": true, + "order": 32767 + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2025-09-23T06:03:51.539020+00:00", + "updated_on": "2025-09-23T06:12:10.113771+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_62714": "Allie Ecker", + "field_62715": "allie.ecker@example.com", + "field_62716": "(949) 873-7292", + "field_62717": [ + { + "name": "HOcIK7YtUCxIlXr3hOMhNm5blA858fNo_87342f8e2a009873f0cf6cbf8b480d495c898a19238d60b3d6fb81efa41c9883.jpg", + "visible_name": "Woman.12.jpg", + "original_name": "HOcIK7YtUCxIlXr3hOMhNm5blA858fNo_87342f8e2a009873f0cf6cbf8b480d495c898a19238d60b3d6fb81efa41c9883.jpg", + "size": 46504 + } + ], + "field_62718": 24704, + "field_62719": "pbkdf2_sha256$720000$GrbFEpHPGcN8C4gE7Y9RWG$GiJ+/uMA/qivo9yBZAT/ZBMjZmiTdFLNDmXDp4wmB2s=" + }, + { + "id": 2, + "order": "2.00000000000000000000", + "created_on": "2025-09-23T06:03:51.539064+00:00", + "updated_on": "2025-09-23T06:12:27.446532+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_62714": "Bran Lopez", + "field_62715": "bran.lopez@example.com", + "field_62716": "(650) 869-3623", + "field_62717": [ + { + "name": "phPFl4MjYbPzYDAtxt0HmJ3IBe3oM2cs_d022b4d76cc31161673cb1f62b4d1984dc8db57d5d7b62b46ff73de4fde45cfd.jpg", + "visible_name": "Man.20.jpg", + "original_name": "phPFl4MjYbPzYDAtxt0HmJ3IBe3oM2cs_d022b4d76cc31161673cb1f62b4d1984dc8db57d5d7b62b46ff73de4fde45cfd.jpg", + "size": 42815 + } + ], + "field_62718": 24703, + "field_62719": "pbkdf2_sha256$720000$w7EUVLLwAppz51gNNZHged$JJ9/aIuG8OcxGNyezMzAVVsO/6VYLg/GavyGTSeDNss=" + }, + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2025-09-23T06:04:06.041119+00:00", + "updated_on": "2025-09-23T06:12:29.361557+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_62714": "Cinda Pullen", + "field_62715": "cinda.pullen@example.com", + "field_62716": "(213) 743-1636", + "field_62717": [ + { + "name": "WEweZFFJSBOkHSn0rEeBXEiwGb4FxtUf_32a0bb1e8cd43f9a27f05e95039ad44b606915d94c3f6ac8aa9359a5d66d0e40.jpg", + "visible_name": "Woman.36.jpg", + "original_name": "WEweZFFJSBOkHSn0rEeBXEiwGb4FxtUf_32a0bb1e8cd43f9a27f05e95039ad44b606915d94c3f6ac8aa9359a5d66d0e40.jpg", + "size": 40189 + } + ], + "field_62718": 24703, + "field_62719": "pbkdf2_sha256$720000$bcq2ym7c6f5qoEt4YIEhd1$rFNK0P+QNe7oS+XwSE0zom5ox8XdDqMKIHQncn5oQFk=" + }, + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2025-09-23T06:04:06.041162+00:00", + "updated_on": "2025-09-23T06:12:24.563698+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_62714": "Clayton Best", + "field_62715": "clayton.best@example.com", + "field_62716": "(916) 478-0153", + "field_62717": [ + { + "name": "RNBV4lNckFNBdh1MMLLsSLDxzENduKOq_636d58571a3d01fad628780775449b7c9fe67e40a5d2154ffeed3cccec5bd2f0.jpg", + "visible_name": "Man.33.jpg", + "original_name": "RNBV4lNckFNBdh1MMLLsSLDxzENduKOq_636d58571a3d01fad628780775449b7c9fe67e40a5d2154ffeed3cccec5bd2f0.jpg", + "size": 30280 + } + ], + "field_62718": 24704, + "field_62719": "pbkdf2_sha256$720000$631MdsZ7mZhOuVYr0NPUFU$UDYBbrkk9z+d2Y7+flpYTkUoqU8/ssQEucaW3fRIJro=" + }, + { + "id": 5, + "order": "5.00000000000000000000", + "created_on": "2025-09-23T06:04:06.041180+00:00", + "updated_on": "2025-09-23T06:12:31.942784+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_62714": "Donald Johns", + "field_62715": "donald.johns@example.com", + "field_62716": "(805) 367-1199", + "field_62717": [ + { + "name": "hs0DuhfVUWd4ZezCMq7EOdSGw4LvMGGk_8bf30a876d0d0082aac1b41058c42c8ff2ab323e25afc56b9f5b9bab76cf3ea9.jpg", + "visible_name": "Man.48.jpg", + "original_name": "hs0DuhfVUWd4ZezCMq7EOdSGw4LvMGGk_8bf30a876d0d0082aac1b41058c42c8ff2ab323e25afc56b9f5b9bab76cf3ea9.jpg", + "size": 44078 + } + ], + "field_62718": 24703, + "field_62719": "pbkdf2_sha256$720000$XeSMFWkJhDl1OSvP6Vsifj$+iGBZP8h7OoZ5QxoaU93bUH4OclLoETVoqdObjc+3S8=" + }, + { + "id": 6, + "order": "6.00000000000000000000", + "created_on": "2025-09-23T06:04:06.041197+00:00", + "updated_on": "2025-09-23T06:12:31.942844+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_62714": "Janice Fitzpatrick", + "field_62715": "janice.fitzpatrick@example.com", + "field_62716": "(510) 476-1189", + "field_62717": [ + { + "name": "xnxgUH6T2K3fssslHVOZidBvJD7btweJ_6033c389c7b9a28b3f4d1ad791cd071bb18d341fb50ca862338d0688129b1d93.jpg", + "visible_name": "Woman.16.jpg", + "original_name": "xnxgUH6T2K3fssslHVOZidBvJD7btweJ_6033c389c7b9a28b3f4d1ad791cd071bb18d341fb50ca862338d0688129b1d93.jpg", + "size": 67980 + } + ], + "field_62718": 24703, + "field_62719": "pbkdf2_sha256$720000$O5iKBCRY55mtIjLmZZP9pI$eo7hByyOEBN+/l+M7ZfuXHYde+tpDZ69cMkHu4n9uKE=" + }, + { + "id": 7, + "order": "7.00000000000000000000", + "created_on": "2025-09-23T06:04:06.041213+00:00", + "updated_on": "2025-09-23T06:12:32.740665+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_62714": "John Marshall", + "field_62715": "john.marshall@example.com", + "field_62716": "(323) 207-7576", + "field_62717": [ + { + "name": "7uLtmeiGtUrTCnnFFIdS1FRODXtNr7Si_5b771a1ce64c7ccb1b909d679a9a9cab06d2563777570d6990b609608a526283.jpg", + "visible_name": "Man.03.jpg", + "original_name": "7uLtmeiGtUrTCnnFFIdS1FRODXtNr7Si_5b771a1ce64c7ccb1b909d679a9a9cab06d2563777570d6990b609608a526283.jpg", + "size": 47886 + } + ], + "field_62718": 24703, + "field_62719": "pbkdf2_sha256$720000$h7cfldz1aNYba1orTC4WPL$PCPQcvDxAs4sM4ZayHBQvs/JwJTPm7RPANu7LtP0Fo0=" + }, + { + "id": 8, + "order": "8.00000000000000000000", + "created_on": "2025-09-23T06:04:06.041228+00:00", + "updated_on": "2025-09-23T06:12:32.740733+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_62714": "Latisha Mazon", + "field_62715": "latisha.mazon@example.com", + "field_62716": "(530) 540-8012", + "field_62717": [ + { + "name": "gVWzbzxef669NeZDYrjA2edBJroCNrgx_64038313f395241c5d4d6615d9ba2d4d680777b263a811177230dbb5e391bd6c.jpg", + "visible_name": "Woman.46.jpg", + "original_name": "gVWzbzxef669NeZDYrjA2edBJroCNrgx_64038313f395241c5d4d6615d9ba2d4d680777b263a811177230dbb5e391bd6c.jpg", + "size": 41851 + } + ], + "field_62718": 24703, + "field_62719": "pbkdf2_sha256$720000$CSAzU5WCDqTdKJlvhDJuoT$MMT1BaGnJrLW8/YGOGYTPTpk6kXznH7x+V/q/9cyxYg=" + }, + { + "id": 9, + "order": "9.00000000000000000000", + "created_on": "2025-09-23T06:04:06.041244+00:00", + "updated_on": "2025-09-23T06:12:33.560238+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_62714": "Lena Hogan", + "field_62715": "lena.hogan@example.com", + "field_62716": "(559) 949-6790", + "field_62717": [ + { + "name": "Slhgg3egSXN0ZaPf6VN9KsXILZJxHH7O_623cf9aca2c33d047b0c4312716412c1265e6269631846fff2dfb1147070c8fd.jpg", + "visible_name": "Woman.17.jpg", + "original_name": "Slhgg3egSXN0ZaPf6VN9KsXILZJxHH7O_623cf9aca2c33d047b0c4312716412c1265e6269631846fff2dfb1147070c8fd.jpg", + "size": 57070 + } + ], + "field_62718": 24703, + "field_62719": "pbkdf2_sha256$720000$fTVA4d7zRl9dD324rXlIbF$1O6G5wdXSkiYj/9diiaJItKs042nfayGMIJfM96FTvU=" + }, + { + "id": 10, + "order": "10.00000000000000000000", + "created_on": "2025-09-23T06:04:06.041260+00:00", + "updated_on": "2025-09-23T06:12:33.560298+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_62714": "Michael Robicheaux", + "field_62715": "michael.robicheaux@example.com", + "field_62716": "(707) 840-5210", + "field_62717": [ + { + "name": "Z5paCxMsYY0qRtcqSyHREvo7OxYi0qjr_0afdb3017ed6ceb4d23b69ab3e44ef5efacb60ad98ddbd49c3138d3059b798c5.jpg", + "visible_name": "Man.28.jpg", + "original_name": "Z5paCxMsYY0qRtcqSyHREvo7OxYi0qjr_0afdb3017ed6ceb4d23b69ab3e44ef5efacb60ad98ddbd49c3138d3059b798c5.jpg", + "size": 81365 + } + ], + "field_62718": 24703, + "field_62719": "pbkdf2_sha256$720000$03RittUsz0T2L9l37Oh5L1$CvDiEMOAGjoLP8lPO+DHXl9EaPhcAkX25jw9trNnBn8=" + }, + { + "id": 11, + "order": "11.00000000000000000000", + "created_on": "2025-09-23T06:04:06.041296+00:00", + "updated_on": "2025-09-23T06:12:34.939851+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_62714": "Nora Mott", + "field_62715": "nora.mott@example.com", + "field_62716": "(818) 240-6675", + "field_62717": [ + { + "name": "aQzHI6ist9jhxec5xX6KAOKb3068um2O_deae73b64502c13fe8f9ba9af624570071be79e62956e1492cd6686186824cc2.jpg", + "visible_name": "Woman.55.jpg", + "original_name": "aQzHI6ist9jhxec5xX6KAOKb3068um2O_deae73b64502c13fe8f9ba9af624570071be79e62956e1492cd6686186824cc2.jpg", + "size": 61165 + } + ], + "field_62718": 24703, + "field_62719": "pbkdf2_sha256$720000$LqtDMgUtoUbdyHAFfh2Idb$R4aU3dN447piREanaWVjDET9yQk5nNRljkDgLDuoaFw=" + } + ], + "data_sync": null, + "field_rules": [] + }, + { + "id": 5824, + "name": "Reset request", + "order": 2, + "fields": [ + { + "id": 62720, + "type": "uuid", + "name": "ID", + "description": null, + "order": 0, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [] + }, + { + "id": 62721, + "type": "email", + "name": "Email", + "description": null, + "order": 1, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [] + }, + { + "id": 62722, + "type": "link_row", + "name": "User", + "description": null, + "order": 2, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 5823, + "link_row_related_field_id": null, + "link_row_limit_selection_view_id": null, + "has_related_field": false, + "link_row_multiple_relationships": false + }, + { + "id": 62723, + "type": "created_on", + "name": "Created on", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_format": "EU", + "date_include_time": true, + "date_time_format": "24", + "date_show_tzinfo": false, + "date_force_timezone": null + }, + { + "id": 62724, + "type": "formula", + "name": "Is Valid", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_include_time": null, + "date_show_tzinfo": null, + "number_prefix": "", + "number_separator": "", + "array_formula_type": null, + "date_time_format": null, + "error": null, + "number_suffix": "", + "number_decimal_places": null, + "duration_format": null, + "date_force_timezone": null, + "nullable": false, + "date_format": null, + "formula": "and(count(field('User')) = 1,date_diff('s',field('Created on'),now()) < 600)", + "formula_type": "boolean" + } + ], + "views": [ + { + "id": 24067, + "type": "grid", + "name": "Grid", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 224427, + "field_id": 62720, + "width": 353, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 224428, + "field_id": 62721, + "width": 193, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 224429, + "field_id": 62722, + "width": 179, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 224430, + "field_id": 62723, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 224431, + "field_id": 62724, + "width": 200, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + } + ], + "rows": [ + { + "id": 34, + "order": "1.00000000000000000000", + "created_on": "2026-02-05T14:12:53.255579+00:00", + "updated_on": "2026-02-19T14:23:30.271902+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_62720": "70c135be-b7cb-4fd8-9e03-0c19e15ad8ed", + "field_62721": "cinda.pullen@example.com", + "field_62722": [ + 3 + ], + "field_62723": null, + "field_62724": null + }, + { + "id": 35, + "order": "2.00000000000000000000", + "created_on": "2026-02-05T14:16:52.123881+00:00", + "updated_on": "2026-02-19T14:23:43.839058+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_62720": "d2e63d73-b168-43ba-b617-43d23bd9abee", + "field_62721": "bran.lopez@example.com", + "field_62722": [ + 2 + ], + "field_62723": null, + "field_62724": null + }, + { + "id": 36, + "order": "3.00000000000000000000", + "created_on": "2026-02-05T14:19:43.152738+00:00", + "updated_on": "2026-02-19T14:23:53.218977+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_62720": "e467ecd4-4899-4e61-9af8-4fd62021feb5", + "field_62721": "falsemail@example.com", + "field_62722": [], + "field_62723": null, + "field_62724": null + } + ], + "data_sync": null, + "field_rules": [] + } + ] + }, + { + "pages": [ + { + "id": 17379, + "name": "__shared__", + "order": 1, + "path": "__shared__", + "path_params": [], + "query_params": [], + "shared": true, + "elements": [ + { + "id": 344208, + "order": "0.25000000000000000000", + "type": "image", + "parent_element_id": 344207, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "image_source_type": "upload", + "image_file_id": { + "name": "412j9RPynEq1CnpsTCBvy5aV6jO5BCMT_19f8e94b815ae7415c8032ce03c362000e30184a0bbc4b098debe63087394231.png", + "original_name": "My Company.png" + }, + "image_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "alt_text": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 344209, + "order": "0.33333333333333331483", + "type": "menu", + "parent_element_id": 344207, + "place_in_container": null, + "css_classes": "", + "visibility": "logged-in", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "menu": { + "link_text_color": "secondary", + "link_font_weight": "semi-bold", + "button_text_color": "zoOtT", + "button_border_size": 1, + "link_hover_text_color": "primary", + "button_background_color": "ElMaZ", + "button_hover_text_color": "zoOtT", + "button_active_text_color": "zoOtT", + "link_hover_text_decoration": [ + false, + false, + false, + false + ], + "link_active_text_decoration": [ + false, + false, + false, + false + ], + "link_default_text_decoration": [ + false, + false, + false, + false + ], + "button_hover_background_color": "#fafafa", + "button_active_background_color": "ElMaZ" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "orientation": "horizontal", + "alignment": "center", + "menu_items": [ + { + "id": 114948, + "variant": "link", + "type": "link", + "menu_item_order": 0, + "uid": "c3cea0e9-b012-4357-97a2-0358d0ae0f83", + "name": "Home", + "navigation_type": "page", + "navigate_to_page_id": 17383, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 114949, + "variant": "link", + "type": "spacer", + "menu_item_order": 1, + "uid": "e58634cb-885e-45d7-93e6-3bf2a844bb04", + "name": "Page", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 114950, + "variant": "link", + "type": "button", + "menu_item_order": 2, + "uid": "b80c73b7-47d6-4a7d-b155-211c345615d7", + "name": "Logout", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + } + ] + }, + { + "id": 344207, + "order": "1.00000000000000000000", + "type": "header", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 20, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "share_type": "all", + "pages": [] + } + ], + "data_sources": [], + "workflow_actions": [ + { + "id": 36417, + "type": "logout", + "order": 1, + "page_id": 17379, + "element_id": 344209, + "event": "b80c73b7-47d6-4a7d-b155-211c345615d7_click" + } + ], + "visibility": "all", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 17380, + "name": "Login", + "order": 1, + "path": "/login", + "path_params": [], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 344210, + "order": "0.50000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "heading_1_text_alignment": "center" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'My application'" + }, + "level": 1 + }, + { + "id": 344211, + "order": "1.00000000000000000000", + "type": "auth_form", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "login_button": { + "button_alignment": "center", + "button_horizontal_padding": 36 + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 50, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 50, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 50, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "small", + "style_width_child": "normal", + "user_source_id": 824, + "login_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Sign in '" + } + }, + { + "id": 344212, + "order": "2.00000000000000000000", + "type": "link", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "link": { + "link_text_alignment": "center" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 30, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 17381, + "page_parameters": [], + "query_parameters": [ + { + "name": "email", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "name": "showform", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'true'" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'forgot password'" + }, + "variant": "link" + } + ], + "data_sources": [], + "workflow_actions": [], + "visibility": "all", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 17381, + "name": "Forgot password", + "order": 2, + "path": "/forgot-password", + "path_params": [], + "query_params": [ + { + "name": "email", + "type": "text" + }, + { + "name": "showform", + "type": "text" + } + ], + "shared": false, + "elements": [ + { + "id": 344216, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "heading_1_text_alignment": "center" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Password reset'" + }, + "level": 1 + }, + { + "id": 344217, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 344213, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Provide the email address associated with your account to recover your password.'" + }, + "format": "plain" + }, + { + "id": 344218, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 344214, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_text_alignment": "center" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 50, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('An email with instructions to reset your password has been sent to ',get('page_parameter.email'))" + }, + "format": "plain" + }, + { + "id": 344213, + "order": "2.00000000000000000000", + "type": "form_container", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('page_parameter.showform') = 'true'" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_alignment": "center", + "button_horizontal_padding": 36 + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 50, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 50, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 50, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "small", + "style_width_child": "normal", + "submit_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Reset password'" + }, + "reset_initial_values_post_submission": false + }, + { + "id": 344215, + "order": "2.00000000000000000000", + "type": "input_text", + "parent_element_id": 344213, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Email'" + }, + "required": true, + "validation_type": "email", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "'name@example.com'" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "is_multiline": false, + "rows": 3, + "input_type": "text" + }, + { + "id": 344219, + "order": "2.00000000000000000000", + "type": "link", + "parent_element_id": 344214, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "link": { + "link_text_alignment": "center" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 17383, + "page_parameters": [], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Back to login page'" + }, + "variant": "link" + }, + { + "id": 344214, + "order": "2.50000000000000000000", + "type": "simple_container", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "contains(get('page_parameter.email'),'@')" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + } + ], + "data_sources": [], + "workflow_actions": [ + { + "id": 36418, + "type": "create_row", + "order": 1, + "page_id": 17381, + "element_id": 344213, + "event": "submit", + "service": { + "id": 60622, + "integration_id": 1259, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 5824, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "field_mappings": [ + { + "field_id": 62721, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.344215')" + }, + "enabled": true + } + ] + } + }, + { + "id": 36419, + "type": "open_page", + "order": 2, + "page_id": 17381, + "element_id": 344213, + "event": "submit", + "navigation_type": "page", + "navigate_to_page_id": 17381, + "page_parameters": [], + "query_parameters": [ + { + "name": "email", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.344215')" + } + }, + { + "name": "showform", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'false'" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self" + } + ], + "visibility": "all", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 17382, + "name": "Reset password", + "order": 3, + "path": "/reset-password/:uuid", + "path_params": [ + { + "name": "uuid", + "type": "text" + } + ], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 344222, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "heading_1_text_alignment": "center" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Password reset'" + }, + "level": 1 + }, + { + "id": 344223, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 344220, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_text_alignment": "center" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'The link to reset your password is expired or invalid. You need to request a new link.'" + }, + "format": "plain" + }, + { + "id": 344225, + "order": "1.00000000000000000000", + "type": "form_container", + "parent_element_id": 344221, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_alignment": "center", + "button_horizontal_padding": 36 + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 50, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 50, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 50, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "small", + "submit_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Set new password'" + }, + "reset_initial_values_post_submission": false + }, + { + "id": 344227, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 344225, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Reset the password for user **',get('data_source.47893.0.field_62722.0.value'),'*** (',get('data_source.47893.0.field_62721'),')')" + }, + "format": "markdown" + }, + { + "id": 344220, + "order": "2.00000000000000000000", + "type": "simple_container", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.47893.0.field_62724') = false" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 344224, + "order": "2.00000000000000000000", + "type": "link", + "parent_element_id": 344220, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "link": { + "link_text_alignment": "center" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 17381, + "page_parameters": [], + "query_parameters": [ + { + "name": "email", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "name": "showform", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'true'" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Request new link'" + }, + "variant": "link" + }, + { + "id": 344226, + "order": "2.00000000000000000000", + "type": "input_text", + "parent_element_id": 344225, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'New password'" + }, + "required": true, + "validation_type": "any", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "is_multiline": false, + "rows": 3, + "input_type": "password" + }, + { + "id": 344221, + "order": "3.00000000000000000000", + "type": "simple_container", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.47893.0.field_62724') = true" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + } + ], + "data_sources": [ + { + "id": 47893, + "name": "Get reset record", + "order": "1.00000000000000000000", + "service": { + "id": 60621, + "integration_id": 1259, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 5824, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 62720, + "type": "equal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.uuid')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + } + ], + "workflow_actions": [ + { + "id": 36420, + "type": "update_row", + "order": 1, + "page_id": 17382, + "element_id": 344225, + "event": "submit", + "service": { + "id": 60623, + "integration_id": 1259, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 5823, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.47893.0.field_62722.0.id')" + }, + "field_mappings": [ + { + "field_id": 62719, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.344226')" + }, + "enabled": true + } + ] + } + }, + { + "id": 36421, + "type": "open_page", + "order": 2, + "page_id": 17382, + "element_id": 344225, + "event": "submit", + "navigation_type": "page", + "navigate_to_page_id": 17383, + "page_parameters": [], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self" + } + ], + "visibility": "all", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 17383, + "name": "Home", + "order": 4, + "path": "/", + "path_params": [], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 344228, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "heading_1_text_alignment": "center" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Welcome ',get('user.username'))" + }, + "level": 1 + } + ], + "data_sources": [], + "workflow_actions": [], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [] + } + ], + "integrations": [ + { + "id": 1259, + "name": "Local Baserow", + "order": "1.00000000000000000000", + "type": "local_baserow", + "authorized_user": null + } + ], + "theme": { + "primary_color": "#4e5cfe", + "secondary_color": "#2bc3f1", + "border_color": "#ededed", + "main_success_color": "#00a235", + "main_warning_color": "#ffd269", + "main_error_color": "#ff5a44", + "custom_colors": [ + { + "name": "Custom 1", + "color": "#ffffff", + "value": "ElMaZ" + }, + { + "name": "Custom 2", + "color": "#202128", + "value": "zoOtT" + }, + { + "name": "Custom 3", + "color": "#6a6b70", + "value": "V6EVv" + } + ], + "body_font_family": "inter", + "body_font_size": 14, + "body_font_weight": "regular", + "body_text_color": "zoOtT", + "body_text_alignment": "left", + "heading_1_font_family": "inter", + "heading_1_font_size": 32, + "heading_1_font_weight": "bold", + "heading_1_text_color": "zoOtT", + "heading_1_text_alignment": "left", + "heading_1_text_decoration": [ + false, + false, + false, + false + ], + "heading_2_font_family": "inter", + "heading_2_font_size": 24, + "heading_2_font_weight": "semi-bold", + "heading_2_text_color": "zoOtT", + "heading_2_text_alignment": "left", + "heading_2_text_decoration": [ + false, + false, + false, + false + ], + "heading_3_font_family": "inter", + "heading_3_font_size": 18, + "heading_3_font_weight": "semi-bold", + "heading_3_text_color": "zoOtT", + "heading_3_text_alignment": "left", + "heading_3_text_decoration": [ + false, + false, + false, + false + ], + "heading_4_font_family": "inter", + "heading_4_font_size": 16, + "heading_4_font_weight": "semi-bold", + "heading_4_text_color": "zoOtT", + "heading_4_text_alignment": "left", + "heading_4_text_decoration": [ + false, + false, + false, + false + ], + "heading_5_font_family": "inter", + "heading_5_font_size": 16, + "heading_5_font_weight": "semi-bold", + "heading_5_text_color": "zoOtT", + "heading_5_text_alignment": "left", + "heading_5_text_decoration": [ + false, + false, + false, + false + ], + "heading_6_font_family": "inter", + "heading_6_font_size": 14, + "heading_6_font_weight": "semi-bold", + "heading_6_text_color": "zoOtT", + "heading_6_text_alignment": "left", + "heading_6_text_decoration": [ + false, + false, + false, + false + ], + "button_font_family": "inter", + "button_font_size": 12, + "button_font_weight": "semi-bold", + "button_alignment": "left", + "button_text_alignment": "center", + "button_width": "auto", + "button_background_color": "primary", + "button_text_color": "ElMaZ", + "button_border_color": "border", + "button_border_size": 0, + "button_border_radius": 6, + "button_vertical_padding": 10, + "button_horizontal_padding": 12, + "button_hover_background_color": "#4653e5", + "button_hover_text_color": "ElMaZ", + "button_hover_border_color": "border", + "button_active_background_color": "primary", + "button_active_text_color": "ElMaZ", + "button_active_border_color": "border", + "image_alignment": "left", + "image_max_width": 100, + "image_max_height": null, + "image_border_radius": 0, + "image_constraint": "contain", + "page_background_color": "#fafafa", + "page_background_file_id": null, + "page_background_mode": "tile", + "label_font_family": "inter", + "label_text_color": "V6EVv", + "label_font_size": 14, + "label_font_weight": "medium", + "input_font_family": "inter", + "input_font_size": 16, + "input_font_weight": "regular", + "input_text_color": "zoOtT", + "input_background_color": "#ffffff", + "input_border_color": "#d7d8d9", + "input_border_size": 1, + "input_border_radius": 6, + "input_vertical_padding": 12, + "input_horizontal_padding": 16, + "table_border_color": "border", + "table_border_size": 1, + "table_border_radius": 6, + "table_header_background_color": "#f7f7f7", + "table_header_text_color": "V6EVv", + "table_header_font_size": 13, + "table_header_font_weight": "semi-bold", + "table_header_font_family": "inter", + "table_header_text_alignment": "left", + "table_cell_background_color": "ElMaZ", + "table_cell_alternate_background_color": "ElMaZ", + "table_cell_alignment": "left", + "table_cell_vertical_padding": 18, + "table_cell_horizontal_padding": 24, + "table_vertical_separator_color": "#000000FF", + "table_vertical_separator_size": 0, + "table_horizontal_separator_color": "border", + "table_horizontal_separator_size": 1, + "link_font_family": "inter", + "link_font_size": 14, + "link_font_weight": "regular", + "link_text_alignment": "left", + "link_text_color": "primary", + "link_hover_text_color": "#4653e5", + "link_active_text_color": "primary", + "link_default_text_decoration": [ + true, + false, + false, + false + ], + "link_hover_text_decoration": [ + true, + false, + false, + false + ], + "link_active_text_decoration": [ + true, + false, + false, + false + ] + }, + "user_sources": [ + { + "id": 824, + "name": "Employees", + "order": "1.00000000000000000000", + "type": "local_baserow", + "uid": "824_5823_62715_62718", + "integration_id": 1259, + "auth_providers": [ + { + "id": 829, + "type": "local_baserow_password", + "domain": null, + "enabled": true, + "password_field_id": 62719 + } + ], + "table_id": 5823, + "email_field_id": 62715, + "name_field_id": 62714, + "role_field_id": 62718 + } + ], + "favicon_file": null, + "login_page": { + "id": 17380, + "name": "Login", + "order": 1, + "path": "/login", + "path_params": [], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 344210, + "order": "0.50000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "heading_1_text_alignment": "center" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'My application'" + }, + "level": 1 + }, + { + "id": 344211, + "order": "1.00000000000000000000", + "type": "auth_form", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "login_button": { + "button_alignment": "center", + "button_horizontal_padding": 36 + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 50, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 50, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 50, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "small", + "style_width_child": "normal", + "user_source_id": 824, + "login_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Sign in '" + } + }, + { + "id": 344212, + "order": "2.00000000000000000000", + "type": "link", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "link": { + "link_text_alignment": "center" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 30, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 17381, + "page_parameters": [], + "query_parameters": [ + { + "name": "email", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "name": "showform", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'true'" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'forgot password'" + }, + "variant": "link" + } + ], + "data_sources": [], + "workflow_actions": [], + "visibility": "all", + "role_type": "allow_all", + "roles": [] + }, + "id": 2225, + "name": "Application", + "order": 2, + "type": "builder" + }, + { + "workflows": [ + { + "id": 171, + "name": "Send magic link", + "order": 1, + "nodes": [ + { + "id": 957, + "type": "local_baserow_rows_created", + "label": "", + "service": { + "id": 60624, + "integration_id": 1260, + "type": "local_baserow_rows_created", + "sample_data": { + "data": { + "results": [ + { + "ID": "d87ef532-3f88-4a86-8d5f-eb4cf479afe3", + "id": 7, + "Now": "2026-02-05T09:04:09.170568Z", + "User": [], + "Email": "bran.lopez@example.com", + "order": "7.00000000000000000000", + "Formula": -333.677872, + "Is Valid": true, + "Created on": "2026-02-05T09:09:42.848440Z" + } + ], + "has_next_page": false + }, + "status": 200, + "output_uid": "" + }, + "table_id": 5824 + }, + "workflow_id": 171 + }, + { + "id": 958, + "type": "smtp_email", + "label": "Send magic link", + "service": { + "id": 60625, + "integration_id": 1261, + "type": "smtp_email", + "sample_data": null, + "from_email": { + "mode": "simple", + "version": "0.1", + "formula": "'mailer@baserow.io'" + }, + "from_name": { + "mode": "simple", + "version": "0.1", + "formula": "'Magic link sender'" + }, + "to_emails": { + "mode": "simple", + "version": "0.1", + "formula": "get('previous_node.957.0.field_62721')" + }, + "cc_emails": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "bcc_emails": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "subject": { + "mode": "simple", + "version": "0.1", + "formula": "'Reset your password'" + }, + "body_type": "html", + "body": { + "mode": "simple", + "version": "0.1", + "formula": "concat('','\n','','\n',' ','\n',' ','\n',' Password Reset','\n',' ','\n',' ','\n',' ','\n',' ','\n',' ','\n',' ','\n','
','\n',' ','\n',' ','\n',' ','\n',' ','\n','
','\n','

Hi,

','\n','

','\n',' We received a request to reset your password. Click the button below to choose a new one.','\n','

','\n','

','\n',concat(' ','\n',' Reset password','\n',' ','\n','

','\n','

','\n',' If you didn\u2019t request this, you can safely ignore this email \u2014 your account will remain unchanged.','\n','

','\n','

','\n',' Best regards,
','\n',' The Team','\n','

','\n','
','\n','
','\n',' ','\n','')" + } + }, + "workflow_id": 171 + }, + { + "id": 959, + "type": "local_baserow_list_rows", + "label": "Find associated user", + "service": { + "id": 60626, + "integration_id": 1260, + "type": "local_baserow_list_rows", + "sample_data": { + "data": { + "results": [ + { + "id": 2, + "Name": "Bran Lopez", + "Email": "bran.lopez@example.com", + "Phone": "(650) 869-3623", + "order": "2.00000000000000000000", + "Picture": [ + { + "url": "https://baserow-backend-production20240528124524339000000001.s3.amazonaws.com/user_files/z6s9660woUKPgAM0ev9aNu8krAvxfCMb_d022b4d76cc31161673cb1f62b4d1984dc8db57d5d7b62b46ff73de4fde45cfd.jpg", + "name": "z6s9660woUKPgAM0ev9aNu8krAvxfCMb_d022b4d76cc31161673cb1f62b4d1984dc8db57d5d7b62b46ff73de4fde45cfd.jpg", + "size": 42815, + "is_image": true, + "mime_type": "image/jpeg", + "thumbnails": { + "tiny": { + "url": "https://baserow-backend-production20240528124524339000000001.s3.amazonaws.com/thumbnails/tiny/z6s9660woUKPgAM0ev9aNu8krAvxfCMb_d022b4d76cc31161673cb1f62b4d1984dc8db57d5d7b62b46ff73de4fde45cfd.jpg", + "width": null, + "height": 21 + }, + "small": { + "url": "https://baserow-backend-production20240528124524339000000001.s3.amazonaws.com/thumbnails/small/z6s9660woUKPgAM0ev9aNu8krAvxfCMb_d022b4d76cc31161673cb1f62b4d1984dc8db57d5d7b62b46ff73de4fde45cfd.jpg", + "width": 48, + "height": 48 + }, + "card_cover": { + "url": "https://baserow-backend-production20240528124524339000000001.s3.amazonaws.com/thumbnails/card_cover/z6s9660woUKPgAM0ev9aNu8krAvxfCMb_d022b4d76cc31161673cb1f62b4d1984dc8db57d5d7b62b46ff73de4fde45cfd.jpg", + "width": 300, + "height": 160 + } + }, + "image_width": 1155, + "uploaded_at": "2025-10-08T12:57:27.039275+00:00", + "image_height": 720, + "visible_name": "Man.20.jpg" + } + ], + "Job role": { + "id": 5218927, + "color": "light-brown", + "value": "Other" + }, + "Password": true + } + ], + "has_next_page": false + }, + "status": 200, + "output_uid": "" + }, + "table_id": 5823, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 62715, + "type": "equal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('previous_node.957.0.field_62721')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + }, + "workflow_id": 171 + }, + { + "id": 960, + "type": "router", + "label": "Check user found", + "service": { + "id": 60627, + "integration_id": null, + "type": "router", + "sample_data": { + "data": { + "edge": { + "label": "Yes" + } + }, + "status": 200, + "output_uid": "" + }, + "edges": [ + { + "label": "No", + "uid": "af1681f0-fb3e-4bbc-94e5-29635ab8880f", + "condition": { + "mode": "advanced", + "version": "0.1", + "formula": "is_empty(get('previous_node.959.*.id'))" + } + } + ], + "default_edge_label": "Yes" + }, + "workflow_id": 171 + }, + { + "id": 961, + "type": "local_baserow_update_row", + "label": "Set user", + "service": { + "id": 60628, + "integration_id": 1260, + "type": "local_baserow_upsert_row", + "sample_data": { + "data": { + "ID": "d87ef532-3f88-4a86-8d5f-eb4cf479afe3", + "id": 7, + "Now": "2026-02-05T09:25:14.926048Z", + "User": [ + { + "id": 2, + "order": "2.00000000000000000000", + "value": "Bran Lopez" + } + ], + "Email": "bran.lopez@example.com", + "order": "7.00000000000000000000", + "Formula": 932.077608, + "Is Valid": false, + "Created on": "2026-02-05T09:09:42.848440Z" + }, + "status": 200, + "output_uid": "" + }, + "table_id": 5824, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('previous_node.957.0.id')" + }, + "field_mappings": [ + { + "field_id": 62722, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('previous_node.959.0.id')" + }, + "enabled": true + } + ] + }, + "workflow_id": 171 + } + ], + "state": "draft", + "graph": { + "0": 957, + "957": { + "next": { + "": [ + 959 + ] + } + }, + "958": {}, + "959": { + "next": { + "": [ + 960 + ] + } + }, + "960": { + "next": { + "": [ + 961 + ] + } + }, + "961": { + "next": { + "": [ + 958 + ] + } + } + } + } + ], + "integrations": [ + { + "id": 1260, + "name": "Local Baserow", + "order": "1.00000000000000000000", + "type": "local_baserow", + "authorized_user": null + }, + { + "id": 1261, + "name": "SMTP Email", + "order": "2.00000000000000000000", + "type": "smtp", + "host": "smtp.gmail.com", + "port": 587, + "use_tls": true, + "username": null, + "password": null + } + ], + "id": 2226, + "name": "Password reset", + "order": 3, + "type": "automation" + } + ] +} \ No newline at end of file diff --git a/backend/templates/password-reset.zip b/backend/templates/password-reset.zip new file mode 100644 index 0000000000..2fed40ca25 Binary files /dev/null and b/backend/templates/password-reset.zip differ diff --git a/backend/templates/program-management-kpi.json b/backend/templates/program-management-kpi.json new file mode 100644 index 0000000000..da97e757fe --- /dev/null +++ b/backend/templates/program-management-kpi.json @@ -0,0 +1,12080 @@ +{ + "baserow_template_version": 1, + "name": "Program Management & KPI Tracker", + "icon": "iconoir-dashboard", + "keywords": [ + "donations", + "kpi", + "funding programs", + "task management", + "deliverables", + "performance monitoring" + ], + "categories": [ + "Project Management" + ], + "open_application": 2377, + "export": [ + { + "id": 2377, + "name": "Program Management & KPI Tracker", + "order": 1, + "type": "database", + "tables": [ + { + "id": 6315, + "name": "Personnel", + "order": 1, + "fields": [ + { + "id": 68896, + "type": "text", + "name": "Name", + "description": null, + "order": 1, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 68897, + "type": "formula", + "name": "Employee ID", + "description": null, + "order": 0, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_separator": "", + "date_time_format": null, + "number_decimal_places": null, + "array_formula_type": null, + "date_include_time": null, + "number_prefix": "", + "error": null, + "number_suffix": "", + "date_format": null, + "nullable": false, + "date_force_timezone": null, + "duration_format": null, + "date_show_tzinfo": null, + "formula": "concat('EMP00', row_id())", + "formula_type": "text" + }, + { + "id": 68898, + "type": "email", + "name": "Email", + "description": null, + "order": 2, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [] + }, + { + "id": 68899, + "type": "single_select", + "name": "Role", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "select_options": [ + { + "id": 32993, + "value": "Administrator", + "color": "blue", + "order": 0 + }, + { + "id": 32994, + "value": "Program Manager", + "color": "green", + "order": 1 + }, + { + "id": 32995, + "value": "Contributor", + "color": "orange", + "order": 2 + }, + { + "id": 32996, + "value": "Executive Viewer", + "color": "purple", + "order": 3 + } + ], + "single_select_default": null + }, + { + "id": 68900, + "type": "boolean", + "name": "Active", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "boolean_default": false + }, + { + "id": 68901, + "type": "file", + "name": "Profile Picture", + "description": null, + "order": 5, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [] + }, + { + "id": 68902, + "type": "link_row", + "name": "Managed Programs", + "description": null, + "order": 6, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 6317, + "link_row_related_field_id": 68915, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 68903, + "type": "link_row", + "name": "Assigned Tasks", + "description": null, + "order": 10, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 6319, + "link_row_related_field_id": 68936, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 68904, + "type": "link_row", + "name": "Submitted KPI Updates", + "description": null, + "order": 11, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 6321, + "link_row_related_field_id": 68950, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 68905, + "type": "password", + "name": "Password", + "description": null, + "order": 12, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "allow_endpoint_authentication": true + }, + { + "id": 68951, + "type": "count", + "name": "Active Programs Count", + "description": null, + "order": 13, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_separator": "", + "date_time_format": null, + "number_decimal_places": 0, + "array_formula_type": null, + "date_include_time": null, + "number_prefix": "", + "error": null, + "number_suffix": "", + "date_format": null, + "nullable": false, + "date_force_timezone": null, + "duration_format": null, + "date_show_tzinfo": null, + "through_field_id": 68902 + } + ], + "views": [ + { + "id": 25775, + "type": "grid", + "name": "All personnel", + "order": 2, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "medium", + "field_options": [ + { + "id": 230388, + "field_id": 68897, + "width": 200, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230389, + "field_id": 68896, + "width": 200, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230390, + "field_id": 68898, + "width": 200, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230391, + "field_id": 68899, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230392, + "field_id": 68905, + "width": 119, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230393, + "field_id": 68900, + "width": 118, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230394, + "field_id": 68901, + "width": 148, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230395, + "field_id": 68902, + "width": 200, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230396, + "field_id": 68903, + "width": 200, + "hidden": false, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230397, + "field_id": 68904, + "width": 200, + "hidden": false, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230398, + "field_id": 68951, + "width": 200, + "hidden": false, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 25776, + "type": "grid", + "name": "Active personnel", + "order": 3, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 14826, + "field_id": 68900, + "type": "boolean", + "value": "1", + "group": null + } + ], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 230400, + "field_id": 68896, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230399, + "field_id": 68897, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230401, + "field_id": 68898, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230402, + "field_id": 68899, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230403, + "field_id": 68900, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230404, + "field_id": 68901, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230405, + "field_id": 68902, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230406, + "field_id": 68903, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230407, + "field_id": 68904, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230408, + "field_id": 68905, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230409, + "field_id": 68951, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 25777, + "type": "grid", + "name": "Grouped by role", + "order": 4, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [ + { + "id": 3117, + "field_id": 68899, + "order": "ASC" + } + ], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 230411, + "field_id": 68896, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230410, + "field_id": 68897, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230412, + "field_id": 68898, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230413, + "field_id": 68899, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230414, + "field_id": 68900, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230415, + "field_id": 68901, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230416, + "field_id": 68902, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230417, + "field_id": 68903, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230418, + "field_id": 68904, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230419, + "field_id": 68905, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230420, + "field_id": 68951, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 25778, + "type": "gallery", + "name": "Personnel directory", + "order": 5, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "decorations": [], + "public": false, + "card_cover_image_field_id": 68901, + "field_options": [ + { + "id": 19273, + "field_id": 68896, + "hidden": false, + "order": 32767 + }, + { + "id": 19272, + "field_id": 68897, + "hidden": false, + "order": 32767 + }, + { + "id": 19274, + "field_id": 68898, + "hidden": false, + "order": 32767 + }, + { + "id": 19275, + "field_id": 68899, + "hidden": true, + "order": 32767 + }, + { + "id": 19276, + "field_id": 68900, + "hidden": true, + "order": 32767 + }, + { + "id": 19277, + "field_id": 68901, + "hidden": true, + "order": 32767 + }, + { + "id": 19278, + "field_id": 68902, + "hidden": true, + "order": 32767 + }, + { + "id": 19279, + "field_id": 68903, + "hidden": true, + "order": 32767 + }, + { + "id": 19280, + "field_id": 68904, + "hidden": true, + "order": 32767 + }, + { + "id": 19281, + "field_id": 68905, + "hidden": true, + "order": 32767 + }, + { + "id": 19282, + "field_id": 68951, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 25779, + "type": "form", + "name": "Add personnel", + "order": 6, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "public": false, + "title": "Add personnel", + "description": "", + "cover_image": null, + "logo_image": null, + "submit_text": "Submit", + "submit_action": "MESSAGE", + "submit_action_message": "", + "submit_action_redirect_url": "", + "field_options": [ + { + "id": 29477, + "field_id": 68896, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29476, + "field_id": 68897, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29478, + "field_id": 68898, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29479, + "field_id": 68899, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29480, + "field_id": 68900, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29481, + "field_id": 68901, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29482, + "field_id": 68902, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29483, + "field_id": 68903, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29484, + "field_id": 68904, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29485, + "field_id": 68905, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29486, + "field_id": 68951, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2026-03-15T19:59:18.429980+00:00", + "updated_on": "2026-03-20T07:39:00.671534+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_68896": "Alice Smith", + "field_68897": null, + "field_68898": "alice.smith@example.org", + "field_68899": 32993, + "field_68900": "true", + "field_68901": [ + { + "name": "i4BefmBNjpNHra7GLCa7JLMl0xksbTeT_87342f8e2a009873f0cf6cbf8b480d495c898a19238d60b3d6fb81efa41c9883.jpg", + "visible_name": "h34HxZ0kAiRR3AMHZUH4u2zo6zZ7za3...19238d60b3d6fb81efa41c9883.jpg", + "original_name": "i4BefmBNjpNHra7GLCa7JLMl0xksbTeT_87342f8e2a009873f0cf6cbf8b480d495c898a19238d60b3d6fb81efa41c9883.jpg", + "size": 46504 + } + ], + "field_68902": [ + 2 + ], + "field_68903": [ + 1 + ], + "field_68904": [ + 1 + ], + "field_68905": "pbkdf2_sha256$1000000$H0hcXb4Kdok6ABwOZAi7K7$N0tPvZ2601C5PwX+9bWUW2MHWEB9mLGZjzoXhlSIXZs=", + "field_68951": null + }, + { + "id": 2, + "order": "2.00000000000000000000", + "created_on": "2026-03-15T19:59:18.430057+00:00", + "updated_on": "2026-03-20T07:39:02.417529+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_68896": "Bob Johnson", + "field_68897": null, + "field_68898": "bob.johnson@example.org", + "field_68899": 32994, + "field_68900": "true", + "field_68901": [ + { + "name": "jOQ9G5MAM2PDYSgJk90FqhxUXS3eqRCO_d022b4d76cc31161673cb1f62b4d1984dc8db57d5d7b62b46ff73de4fde45cfd.jpg", + "visible_name": "EKgD9YTcXYlnVUqQJfeTPypGOkguBQy...7d5d7b62b46ff73de4fde45cfd.jpg", + "original_name": "jOQ9G5MAM2PDYSgJk90FqhxUXS3eqRCO_d022b4d76cc31161673cb1f62b4d1984dc8db57d5d7b62b46ff73de4fde45cfd.jpg", + "size": 42815 + } + ], + "field_68902": [ + 5 + ], + "field_68903": [ + 5 + ], + "field_68904": [ + 2 + ], + "field_68905": "pbkdf2_sha256$1000000$k5gxQ3MCRRjXE1EJ005T1D$pgOUGHWpfj+roAfrlHSDruGFibSmnOw11jkr16ILz+I=", + "field_68951": null + }, + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2026-03-15T19:59:18.430092+00:00", + "updated_on": "2026-03-20T07:39:04.110885+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_68896": "Carol Lee", + "field_68897": null, + "field_68898": "carol.lee@example.org", + "field_68899": 32995, + "field_68900": "true", + "field_68901": [ + { + "name": "7v3frEGguynNUrygreacE0fESkOqzWwx_32a0bb1e8cd43f9a27f05e95039ad44b606915d94c3f6ac8aa9359a5d66d0e40.jpg", + "visible_name": "mz5stqbFkMMhbfQJdTpgDdV0ThY9UOZ...d94c3f6ac8aa9359a5d66d0e40.jpg", + "original_name": "7v3frEGguynNUrygreacE0fESkOqzWwx_32a0bb1e8cd43f9a27f05e95039ad44b606915d94c3f6ac8aa9359a5d66d0e40.jpg", + "size": 40189 + } + ], + "field_68902": [ + 3 + ], + "field_68903": [ + 3 + ], + "field_68904": [ + 3 + ], + "field_68905": "pbkdf2_sha256$1000000$25EXUwYr0pkzb2JjDmbh5K$VCWx7/djkVmI81cNjpYZuV7Ja+MWG+RPnTVSoAzH/RE=", + "field_68951": null + }, + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2026-03-15T19:59:18.430124+00:00", + "updated_on": "2026-03-20T07:39:05.841608+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_68896": "David Kim", + "field_68897": null, + "field_68898": "david.kim@example.org", + "field_68899": 32996, + "field_68900": "true", + "field_68901": [ + { + "name": "N9CpKDDvOJ7xTddnlWwnt4KBozRWoO7i_636d58571a3d01fad628780775449b7c9fe67e40a5d2154ffeed3cccec5bd2f0.jpg", + "visible_name": "tgKWtaIlWSk7ISU9cQQM7P0cnFSYtj1...40a5d2154ffeed3cccec5bd2f0.jpg", + "original_name": "N9CpKDDvOJ7xTddnlWwnt4KBozRWoO7i_636d58571a3d01fad628780775449b7c9fe67e40a5d2154ffeed3cccec5bd2f0.jpg", + "size": 30280 + } + ], + "field_68902": [ + 4 + ], + "field_68903": [ + 4 + ], + "field_68904": [ + 4 + ], + "field_68905": "pbkdf2_sha256$1000000$GG79hOTdrGIINwWZ1PyTVL$GhW2d8+t0eD0sx7f/9zeepDAaDfi3De0LdhEUC3q70g=", + "field_68951": null + }, + { + "id": 5, + "order": "5.00000000000000000000", + "created_on": "2026-03-15T19:59:18.430154+00:00", + "updated_on": "2026-03-20T07:39:12.776476+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_68896": "Eva Martinez", + "field_68897": null, + "field_68898": "eva.martinez@example.org", + "field_68899": 32995, + "field_68900": "false", + "field_68901": [ + { + "name": "50BwHulTUX9VVaezoCiFih80HEGL7C5s_6ad39d6d65565870ad02632ebc8f3103ef36c0004f787bc43df882383912bcf1.jpg", + "visible_name": "toDc6RqW5WM8Snwc4QDPyMP5czDFMB2...004f787bc43df882383912bcf1.jpg", + "original_name": "50BwHulTUX9VVaezoCiFih80HEGL7C5s_6ad39d6d65565870ad02632ebc8f3103ef36c0004f787bc43df882383912bcf1.jpg", + "size": 61085 + } + ], + "field_68902": [ + 1 + ], + "field_68903": [ + 2 + ], + "field_68904": [ + 5 + ], + "field_68905": "pbkdf2_sha256$1000000$BQC0OZNtLnUA2LajuTnOPd$8otrOJ4HMkuQ9bEMpAzvH7EikjlMUIBkT/uQWfih6Hw=", + "field_68951": null + } + ], + "data_sync": null, + "field_rules": [] + }, + { + "id": 6316, + "name": "Donors", + "order": 2, + "fields": [ + { + "id": 68906, + "type": "text", + "name": "Name", + "description": null, + "order": 1, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 68907, + "type": "formula", + "name": "Donor ID", + "description": null, + "order": 0, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_separator": "", + "date_time_format": null, + "number_decimal_places": null, + "array_formula_type": null, + "date_include_time": null, + "number_prefix": "", + "error": null, + "number_suffix": "", + "date_format": null, + "nullable": false, + "date_force_timezone": null, + "duration_format": null, + "date_show_tzinfo": null, + "formula": "concat('DON00', row_id())", + "formula_type": "text" + }, + { + "id": 68908, + "type": "text", + "name": "Contact Person", + "description": null, + "order": 2, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 68909, + "type": "email", + "name": "Contact Email", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [] + }, + { + "id": 68910, + "type": "url", + "name": "Website", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [] + }, + { + "id": 68911, + "type": "boolean", + "name": "Active Donor", + "description": null, + "order": 5, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "boolean_default": false + }, + { + "id": 68912, + "type": "link_row", + "name": "Funded Programs", + "description": null, + "order": 6, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 6317, + "link_row_related_field_id": 68916, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 68952, + "type": "count", + "name": "Total Programs Supported", + "description": null, + "order": 7, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_separator": "", + "date_time_format": null, + "number_decimal_places": 0, + "array_formula_type": null, + "date_include_time": null, + "number_prefix": "", + "error": null, + "number_suffix": "", + "date_format": null, + "nullable": false, + "date_force_timezone": null, + "duration_format": null, + "date_show_tzinfo": null, + "through_field_id": 68912 + } + ], + "views": [ + { + "id": 25780, + "type": "grid", + "name": "All donors", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "medium", + "field_options": [ + { + "id": 230422, + "field_id": 68906, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230421, + "field_id": 68907, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230423, + "field_id": 68908, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230424, + "field_id": 68909, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230425, + "field_id": 68910, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230426, + "field_id": 68911, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "checked_count", + "aggregation_raw_type": "empty_count" + }, + { + "id": 230427, + "field_id": 68912, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230428, + "field_id": 68952, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "sum", + "aggregation_raw_type": "sum" + } + ] + }, + { + "id": 25781, + "type": "grid", + "name": "Active donors", + "order": 2, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 14827, + "field_id": 68911, + "type": "boolean", + "value": "1", + "group": null + } + ], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 230430, + "field_id": 68906, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230429, + "field_id": 68907, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230431, + "field_id": 68908, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230432, + "field_id": 68909, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230433, + "field_id": 68910, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230434, + "field_id": 68911, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230435, + "field_id": 68912, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230436, + "field_id": 68952, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 25782, + "type": "gallery", + "name": "Donor directory", + "order": 3, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "decorations": [ + { + "id": 6790, + "type": "left_border_color", + "value_provider_type": "conditional_color", + "value_provider_conf": { + "colors": [ + { + "id": "80d0ea8a-d86a-40ab-bd28-371d9c8bfd05", + "color": "light-pink", + "filters": [ + { + "id": "5d78870e-3059-4468-b1a7-360f53dad432", + "type": "boolean", + "field": 68911, + "group": null, + "value": "1" + } + ], + "operator": "AND" + } + ] + }, + "order": 1 + } + ], + "public": false, + "field_options": [ + { + "id": 19284, + "field_id": 68906, + "hidden": false, + "order": 32767 + }, + { + "id": 19283, + "field_id": 68907, + "hidden": false, + "order": 32767 + }, + { + "id": 19285, + "field_id": 68908, + "hidden": false, + "order": 32767 + }, + { + "id": 19286, + "field_id": 68909, + "hidden": true, + "order": 32767 + }, + { + "id": 19287, + "field_id": 68910, + "hidden": true, + "order": 32767 + }, + { + "id": 19288, + "field_id": 68911, + "hidden": true, + "order": 32767 + }, + { + "id": 19289, + "field_id": 68912, + "hidden": true, + "order": 32767 + }, + { + "id": 19290, + "field_id": 68952, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 25783, + "type": "grid", + "name": "Grouped by active status", + "order": 4, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [ + { + "id": 3118, + "field_id": 68911, + "order": "ASC" + } + ], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 230438, + "field_id": 68906, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230437, + "field_id": 68907, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230439, + "field_id": 68908, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230440, + "field_id": 68909, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230441, + "field_id": 68910, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230442, + "field_id": 68911, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230443, + "field_id": 68912, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230444, + "field_id": 68952, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 25784, + "type": "form", + "name": "Add donor", + "order": 5, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "public": false, + "title": "Add donor", + "description": "", + "cover_image": null, + "logo_image": null, + "submit_text": "Submit", + "submit_action": "MESSAGE", + "submit_action_message": "", + "submit_action_redirect_url": "", + "field_options": [ + { + "id": 29488, + "field_id": 68906, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29487, + "field_id": 68907, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29489, + "field_id": 68908, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29490, + "field_id": 68909, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29491, + "field_id": 68910, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29492, + "field_id": 68911, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29493, + "field_id": 68912, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29494, + "field_id": 68952, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2026-03-15T19:59:20.740732+00:00", + "updated_on": "2026-03-15T19:59:20.740732+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68906": "Global Health Foundation", + "field_68907": null, + "field_68908": "Maria Torres", + "field_68909": "maria.torres@ghf.org", + "field_68910": "https://www.ghf.org", + "field_68911": "true", + "field_68912": [ + 1 + ], + "field_68952": null + }, + { + "id": 2, + "order": "2.00000000000000000000", + "created_on": "2026-03-15T19:59:20.740810+00:00", + "updated_on": "2026-03-15T19:59:20.740810+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68906": "Education for All Initiative", + "field_68907": null, + "field_68908": "Liam Patel", + "field_68909": "liam.patel@efa.org", + "field_68910": "https://www.efa.org", + "field_68911": "true", + "field_68912": [ + 2 + ], + "field_68952": null + }, + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2026-03-15T19:59:20.740841+00:00", + "updated_on": "2026-03-15T19:59:20.740841+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68906": "Clean Water Trust", + "field_68907": null, + "field_68908": "Sofia Nguyen", + "field_68909": "sofia.nguyen@cwt.org", + "field_68910": "https://www.cwt.org", + "field_68911": "true", + "field_68912": [ + 2, + 3 + ], + "field_68952": null + }, + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2026-03-15T19:59:20.740867+00:00", + "updated_on": "2026-03-15T19:59:20.740867+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68906": "Tech Innovation Fund", + "field_68907": null, + "field_68908": "Ethan Reed", + "field_68909": "ethan.reed@tif.org", + "field_68910": "https://www.tif.org", + "field_68911": "false", + "field_68912": [ + 4 + ], + "field_68952": null + }, + { + "id": 5, + "order": "5.00000000000000000000", + "created_on": "2026-03-15T19:59:20.740894+00:00", + "updated_on": "2026-03-15T19:59:20.740894+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68906": "Community Development Alliance", + "field_68907": null, + "field_68908": "Olivia Chen", + "field_68909": "olivia.chen@cda.org", + "field_68910": "https://www.cda.org", + "field_68911": "true", + "field_68912": [ + 5 + ], + "field_68952": null + } + ], + "data_sync": null, + "field_rules": [] + }, + { + "id": 6317, + "name": "Programs", + "order": 3, + "fields": [ + { + "id": 68913, + "type": "text", + "name": "Name", + "description": null, + "order": 3, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 68914, + "type": "formula", + "name": "Program ID", + "description": null, + "order": 0, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_separator": "", + "date_time_format": null, + "number_decimal_places": null, + "array_formula_type": null, + "date_include_time": null, + "number_prefix": "", + "error": null, + "number_suffix": "", + "date_format": null, + "nullable": false, + "date_force_timezone": null, + "duration_format": null, + "date_show_tzinfo": null, + "formula": "concat('PRG00', row_id())", + "formula_type": "text" + }, + { + "id": 68915, + "type": "link_row", + "name": "Manager", + "description": null, + "order": 1, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 6315, + "link_row_related_field_id": 68902, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 68916, + "type": "link_row", + "name": "Donors", + "description": null, + "order": 2, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 6316, + "link_row_related_field_id": 68912, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 68917, + "type": "long_text", + "name": "Description", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "long_text_enable_rich_text": true + }, + { + "id": 68918, + "type": "single_select", + "name": "Status", + "description": null, + "order": 5, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "select_options": [ + { + "id": 32997, + "value": "Draft", + "color": "gray", + "order": 0 + }, + { + "id": 32998, + "value": "Active", + "color": "green", + "order": 1 + }, + { + "id": 32999, + "value": "On Hold", + "color": "orange", + "order": 2 + }, + { + "id": 33000, + "value": "Completed", + "color": "blue", + "order": 3 + }, + { + "id": 33001, + "value": "Cancelled", + "color": "red", + "order": 4 + } + ], + "single_select_default": null + }, + { + "id": 68919, + "type": "date", + "name": "Start Date", + "description": null, + "order": 6, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_format": "EU", + "date_include_time": false, + "date_time_format": "24", + "date_show_tzinfo": false, + "date_force_timezone": null + }, + { + "id": 68920, + "type": "date", + "name": "End Date", + "description": null, + "order": 7, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_format": "EU", + "date_include_time": false, + "date_time_format": "24", + "date_show_tzinfo": false, + "date_force_timezone": null + }, + { + "id": 68921, + "type": "number", + "name": "Total Budget", + "description": null, + "order": 8, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_decimal_places": 2, + "number_negative": false, + "number_prefix": "$", + "number_suffix": "", + "number_separator": "COMMA_PERIOD", + "number_default": null + }, + { + "id": 68922, + "type": "link_row", + "name": "Deliverables", + "description": null, + "order": 11, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 6318, + "link_row_related_field_id": 68926, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 68923, + "type": "link_row", + "name": "KPIs", + "description": null, + "order": 14, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 6320, + "link_row_related_field_id": 68943, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 68953, + "type": "count", + "name": "Total Deliverables", + "description": null, + "order": 15, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_separator": "", + "date_time_format": null, + "number_decimal_places": 0, + "array_formula_type": null, + "date_include_time": null, + "number_prefix": "", + "error": null, + "number_suffix": "", + "date_format": null, + "nullable": false, + "date_force_timezone": null, + "duration_format": null, + "date_show_tzinfo": null, + "through_field_id": 68922 + }, + { + "id": 68954, + "type": "count", + "name": "Total KPIs Tracked", + "description": null, + "order": 16, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_separator": "", + "date_time_format": null, + "number_decimal_places": 0, + "array_formula_type": null, + "date_include_time": null, + "number_prefix": "", + "error": null, + "number_suffix": "", + "date_format": null, + "nullable": false, + "date_force_timezone": null, + "duration_format": null, + "date_show_tzinfo": null, + "through_field_id": 68923 + }, + { + "id": 68955, + "type": "lookup", + "name": "Contact Person Email", + "description": null, + "order": 17, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_separator": "", + "date_time_format": null, + "number_decimal_places": null, + "array_formula_type": "char", + "date_include_time": null, + "number_prefix": "", + "error": null, + "number_suffix": "", + "date_format": null, + "nullable": true, + "date_force_timezone": null, + "duration_format": null, + "date_show_tzinfo": null, + "through_field_id": 68916, + "through_field_name": "Donors", + "target_field_id": 68909, + "target_field_name": "Contact Email" + } + ], + "views": [ + { + "id": 25785, + "type": "grid", + "name": "All programs", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "medium", + "field_options": [ + { + "id": 230445, + "field_id": 68914, + "width": 200, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230446, + "field_id": 68916, + "width": 200, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230447, + "field_id": 68955, + "width": 200, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230448, + "field_id": 68913, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230449, + "field_id": 68917, + "width": 200, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230450, + "field_id": 68918, + "width": 200, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230451, + "field_id": 68919, + "width": 200, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230452, + "field_id": 68920, + "width": 200, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230453, + "field_id": 68921, + "width": 200, + "hidden": false, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230454, + "field_id": 68915, + "width": 200, + "hidden": false, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230455, + "field_id": 68922, + "width": 200, + "hidden": false, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230456, + "field_id": 68923, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230457, + "field_id": 68953, + "width": 200, + "hidden": false, + "order": 12, + "aggregation_type": "sum", + "aggregation_raw_type": "sum" + }, + { + "id": 230458, + "field_id": 68954, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "sum", + "aggregation_raw_type": "sum" + } + ] + }, + { + "id": 25786, + "type": "kanban", + "name": "Programs by status", + "order": 2, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "decorations": [ + { + "id": 6791, + "type": "left_border_color", + "value_provider_type": "conditional_color", + "value_provider_conf": { + "colors": [ + { + "id": "fbe4cee0-b892-495e-a723-4e3929ca2e27", + "color": "cyan", + "filters": [ + { + "id": "f0a5ccf9-fb6f-4d73-bfda-56fbbcc0ec36", + "type": "date_is_within", + "field": 68919, + "group": null, + "value": "Europe/London??this_year" + } + ], + "operator": "AND" + } + ] + }, + "order": 1 + } + ], + "public": false, + "single_select_field_id": 68918, + "field_options": [ + { + "id": 34483, + "field_id": 68913, + "hidden": false, + "order": 32767 + }, + { + "id": 34480, + "field_id": 68914, + "hidden": false, + "order": 32767 + }, + { + "id": 34481, + "field_id": 68915, + "hidden": false, + "order": 32767 + }, + { + "id": 34482, + "field_id": 68916, + "hidden": true, + "order": 32767 + }, + { + "id": 34484, + "field_id": 68917, + "hidden": true, + "order": 32767 + }, + { + "id": 34485, + "field_id": 68918, + "hidden": true, + "order": 32767 + }, + { + "id": 34486, + "field_id": 68919, + "hidden": true, + "order": 32767 + }, + { + "id": 34487, + "field_id": 68920, + "hidden": true, + "order": 32767 + }, + { + "id": 34488, + "field_id": 68921, + "hidden": true, + "order": 32767 + }, + { + "id": 34489, + "field_id": 68922, + "hidden": true, + "order": 32767 + }, + { + "id": 34490, + "field_id": 68923, + "hidden": true, + "order": 32767 + }, + { + "id": 34491, + "field_id": 68953, + "hidden": true, + "order": 32767 + }, + { + "id": 34492, + "field_id": 68954, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 25787, + "type": "timeline", + "name": "Program timeline", + "order": 3, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "decorations": [], + "public": false, + "start_date_field_id": 68919, + "end_date_field_id": 68920, + "field_options": [ + { + "id": 2546, + "field_id": 68913, + "hidden": false, + "order": 32767 + }, + { + "id": 2543, + "field_id": 68914, + "hidden": true, + "order": 32767 + }, + { + "id": 2544, + "field_id": 68915, + "hidden": true, + "order": 32767 + }, + { + "id": 2545, + "field_id": 68916, + "hidden": true, + "order": 32767 + }, + { + "id": 2547, + "field_id": 68917, + "hidden": true, + "order": 32767 + }, + { + "id": 2548, + "field_id": 68918, + "hidden": true, + "order": 32767 + }, + { + "id": 2549, + "field_id": 68919, + "hidden": true, + "order": 32767 + }, + { + "id": 2550, + "field_id": 68920, + "hidden": true, + "order": 32767 + }, + { + "id": 2551, + "field_id": 68921, + "hidden": true, + "order": 32767 + }, + { + "id": 2552, + "field_id": 68922, + "hidden": true, + "order": 32767 + }, + { + "id": 2553, + "field_id": 68923, + "hidden": true, + "order": 32767 + }, + { + "id": 2554, + "field_id": 68953, + "hidden": true, + "order": 32767 + }, + { + "id": 2555, + "field_id": 68954, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 25788, + "type": "gallery", + "name": "Program portfolio", + "order": 4, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "decorations": [ + { + "id": 6792, + "type": "background_color", + "value_provider_type": "conditional_color", + "value_provider_conf": { + "colors": [ + { + "id": "0ea43dfe-a45a-4401-8bf9-e941b4e78161", + "color": "light-green", + "filters": [ + { + "id": "6d49af09-35e7-4ba5-aaa7-27e43446665b", + "type": "single_select_equal", + "field": 68918, + "group": null, + "value": "32998" + } + ], + "operator": "AND" + } + ] + }, + "order": 1 + } + ], + "public": false, + "field_options": [ + { + "id": 19294, + "field_id": 68913, + "hidden": false, + "order": 32767 + }, + { + "id": 19291, + "field_id": 68914, + "hidden": false, + "order": 32767 + }, + { + "id": 19292, + "field_id": 68915, + "hidden": false, + "order": 32767 + }, + { + "id": 19293, + "field_id": 68916, + "hidden": true, + "order": 32767 + }, + { + "id": 19295, + "field_id": 68917, + "hidden": true, + "order": 32767 + }, + { + "id": 19296, + "field_id": 68918, + "hidden": true, + "order": 32767 + }, + { + "id": 19297, + "field_id": 68919, + "hidden": true, + "order": 32767 + }, + { + "id": 19298, + "field_id": 68920, + "hidden": true, + "order": 32767 + }, + { + "id": 19299, + "field_id": 68921, + "hidden": true, + "order": 32767 + }, + { + "id": 19300, + "field_id": 68922, + "hidden": true, + "order": 32767 + }, + { + "id": 19301, + "field_id": 68923, + "hidden": true, + "order": 32767 + }, + { + "id": 19302, + "field_id": 68953, + "hidden": true, + "order": 32767 + }, + { + "id": 19303, + "field_id": 68954, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 25789, + "type": "form", + "name": "New program setup", + "order": 5, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "public": false, + "title": "New program setup", + "description": "", + "cover_image": null, + "logo_image": null, + "submit_text": "Submit", + "submit_action": "MESSAGE", + "submit_action_message": "", + "submit_action_redirect_url": "", + "field_options": [ + { + "id": 29498, + "field_id": 68913, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29495, + "field_id": 68914, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29496, + "field_id": 68915, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29497, + "field_id": 68916, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29499, + "field_id": 68917, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29500, + "field_id": 68918, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29501, + "field_id": 68919, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29502, + "field_id": 68920, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29503, + "field_id": 68921, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29504, + "field_id": 68922, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29505, + "field_id": 68923, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29506, + "field_id": 68953, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29507, + "field_id": 68954, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2026-03-15T19:59:24.490862+00:00", + "updated_on": "2026-03-15T20:41:58.120712+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68913": "Community Health Initiative", + "field_68914": null, + "field_68915": [ + 5 + ], + "field_68916": [ + 1 + ], + "field_68917": "Improving access to primary healthcare in underserved regions.", + "field_68918": 32998, + "field_68919": "2023-04-01", + "field_68920": "2025-03-31", + "field_68921": "2500000.00", + "field_68922": [ + 1 + ], + "field_68923": [ + 3 + ], + "field_68953": null, + "field_68954": null, + "field_68955": null + }, + { + "id": 2, + "order": "2.00000000000000000000", + "created_on": "2026-03-15T19:59:24.490937+00:00", + "updated_on": "2026-03-15T20:41:37.285632+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68913": "Digital Education Platform", + "field_68914": null, + "field_68915": [ + 1 + ], + "field_68916": [ + 2, + 3 + ], + "field_68917": "Developing online resources for K-12 education in low-income areas.", + "field_68918": 32997, + "field_68919": "2024-01-15", + "field_68920": "2026-12-31", + "field_68921": "1800000.00", + "field_68922": [ + 4 + ], + "field_68923": [ + 2 + ], + "field_68953": null, + "field_68954": null, + "field_68955": null + }, + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2026-03-15T19:59:24.490973+00:00", + "updated_on": "2026-03-15T20:42:09.744838+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68913": "Clean Water Access Project", + "field_68914": null, + "field_68915": [ + 3 + ], + "field_68916": [ + 3 + ], + "field_68917": "Installing sustainable water filtration systems in rural communities.", + "field_68918": 32999, + "field_68919": "2022-07-01", + "field_68920": "2024-06-30", + "field_68921": "1200000.00", + "field_68922": [ + 3 + ], + "field_68923": [ + 1 + ], + "field_68953": null, + "field_68954": null, + "field_68955": null + }, + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2026-03-15T19:59:24.491004+00:00", + "updated_on": "2026-03-15T20:42:02.255825+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68913": "Tech Innovation Hub", + "field_68914": null, + "field_68915": [ + 4 + ], + "field_68916": [ + 4 + ], + "field_68917": "Supporting startups focused on AI for social good.", + "field_68918": 32998, + "field_68919": "2023-09-01", + "field_68920": "2025-08-31", + "field_68921": "3000000.00", + "field_68922": [ + 2 + ], + "field_68923": [ + 4 + ], + "field_68953": null, + "field_68954": null, + "field_68955": null + }, + { + "id": 5, + "order": "5.00000000000000000000", + "created_on": "2026-03-15T19:59:24.491035+00:00", + "updated_on": "2026-03-15T20:42:06.022586+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68913": "Community Development Alliance Program", + "field_68914": null, + "field_68915": [ + 2 + ], + "field_68916": [ + 5 + ], + "field_68917": "Empowering local NGOs with capacity building and funding.", + "field_68918": 32997, + "field_68919": "2024-03-01", + "field_68920": "2027-02-28", + "field_68921": "2200000.00", + "field_68922": [ + 5 + ], + "field_68923": [ + 5 + ], + "field_68953": null, + "field_68954": null, + "field_68955": null + } + ], + "data_sync": null, + "field_rules": [] + }, + { + "id": 6318, + "name": "Deliverables", + "order": 4, + "fields": [ + { + "id": 68924, + "type": "text", + "name": "Name", + "description": null, + "order": 2, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 68925, + "type": "formula", + "name": "Deliverable ID", + "description": null, + "order": 0, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_separator": "", + "date_time_format": null, + "number_decimal_places": null, + "array_formula_type": null, + "date_include_time": null, + "number_prefix": "", + "error": null, + "number_suffix": "", + "date_format": null, + "nullable": false, + "date_force_timezone": null, + "duration_format": null, + "date_show_tzinfo": null, + "formula": "concat('DEL10', row_id())", + "formula_type": "text" + }, + { + "id": 68926, + "type": "link_row", + "name": "Program", + "description": null, + "order": 1, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 6317, + "link_row_related_field_id": 68922, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 68927, + "type": "long_text", + "name": "Description", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "long_text_enable_rich_text": true + }, + { + "id": 68928, + "type": "single_select", + "name": "Status", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "select_options": [ + { + "id": 33002, + "value": "Not Started", + "color": "gray", + "order": 0 + }, + { + "id": 33003, + "value": "In Progress", + "color": "orange", + "order": 1 + }, + { + "id": 33004, + "value": "In Review", + "color": "blue", + "order": 2 + }, + { + "id": 33005, + "value": "Completed", + "color": "green", + "order": 3 + } + ], + "single_select_default": null + }, + { + "id": 68929, + "type": "date", + "name": "Due Date", + "description": null, + "order": 5, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_format": "EU", + "date_include_time": false, + "date_time_format": "24", + "date_show_tzinfo": false, + "date_force_timezone": null + }, + { + "id": 68930, + "type": "link_row", + "name": "Tasks", + "description": null, + "order": 8, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 6319, + "link_row_related_field_id": 68935, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 68956, + "type": "lookup", + "name": "Program Status", + "description": null, + "order": 9, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_separator": "", + "date_time_format": null, + "number_decimal_places": null, + "array_formula_type": "single_select", + "date_include_time": null, + "number_prefix": "", + "error": null, + "number_suffix": "", + "date_format": null, + "nullable": true, + "date_force_timezone": null, + "duration_format": null, + "date_show_tzinfo": null, + "through_field_id": 68926, + "through_field_name": "Program", + "target_field_id": 68918, + "target_field_name": "Status" + }, + { + "id": 68957, + "type": "count", + "name": "Linked Tasks Count", + "description": null, + "order": 10, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_separator": "", + "date_time_format": null, + "number_decimal_places": 0, + "array_formula_type": null, + "date_include_time": null, + "number_prefix": "", + "error": null, + "number_suffix": "", + "date_format": null, + "nullable": false, + "date_force_timezone": null, + "duration_format": null, + "date_show_tzinfo": null, + "through_field_id": 68930 + } + ], + "views": [ + { + "id": 25790, + "type": "grid", + "name": "All deliverables", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "medium", + "field_options": [ + { + "id": 230459, + "field_id": 68925, + "width": 200, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230460, + "field_id": 68924, + "width": 200, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230461, + "field_id": 68927, + "width": 200, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230462, + "field_id": 68928, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230463, + "field_id": 68929, + "width": 200, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230464, + "field_id": 68930, + "width": 200, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230465, + "field_id": 68926, + "width": 200, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230466, + "field_id": 68956, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230467, + "field_id": 68957, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "sum", + "aggregation_raw_type": "sum" + } + ] + }, + { + "id": 25791, + "type": "kanban", + "name": "Deliverables by status", + "order": 2, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "decorations": [], + "public": false, + "single_select_field_id": 68928, + "field_options": [ + { + "id": 34495, + "field_id": 68924, + "hidden": false, + "order": 32767 + }, + { + "id": 34493, + "field_id": 68925, + "hidden": false, + "order": 32767 + }, + { + "id": 34494, + "field_id": 68926, + "hidden": false, + "order": 32767 + }, + { + "id": 34496, + "field_id": 68927, + "hidden": true, + "order": 32767 + }, + { + "id": 34497, + "field_id": 68928, + "hidden": true, + "order": 32767 + }, + { + "id": 34498, + "field_id": 68929, + "hidden": true, + "order": 32767 + }, + { + "id": 34499, + "field_id": 68930, + "hidden": true, + "order": 32767 + }, + { + "id": 34500, + "field_id": 68956, + "hidden": true, + "order": 32767 + }, + { + "id": 34501, + "field_id": 68957, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 25792, + "type": "calendar", + "name": "Deliverables schedule", + "order": 3, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "decorations": [], + "public": false, + "date_field_id": 68929, + "field_options": [ + { + "id": 18954, + "field_id": 68924, + "hidden": false, + "order": 32767 + }, + { + "id": 18952, + "field_id": 68925, + "hidden": true, + "order": 32767 + }, + { + "id": 18953, + "field_id": 68926, + "hidden": true, + "order": 32767 + }, + { + "id": 18955, + "field_id": 68927, + "hidden": true, + "order": 32767 + }, + { + "id": 18956, + "field_id": 68928, + "hidden": true, + "order": 32767 + }, + { + "id": 18957, + "field_id": 68929, + "hidden": true, + "order": 32767 + }, + { + "id": 18958, + "field_id": 68930, + "hidden": true, + "order": 32767 + }, + { + "id": 18959, + "field_id": 68956, + "hidden": true, + "order": 32767 + }, + { + "id": 18960, + "field_id": 68957, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 25793, + "type": "grid", + "name": "Pending deliverables", + "order": 4, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 14828, + "field_id": 68928, + "type": "single_select_not_equal", + "value": "33005", + "group": null + } + ], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 230470, + "field_id": 68924, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230468, + "field_id": 68925, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230469, + "field_id": 68926, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230471, + "field_id": 68927, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230472, + "field_id": 68928, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230473, + "field_id": 68929, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230474, + "field_id": 68930, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230475, + "field_id": 68956, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230476, + "field_id": 68957, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 25794, + "type": "form", + "name": "Add deliverable", + "order": 5, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "public": false, + "title": "Add deliverable", + "description": "", + "cover_image": null, + "logo_image": null, + "submit_text": "Submit", + "submit_action": "MESSAGE", + "submit_action_message": "", + "submit_action_redirect_url": "", + "field_options": [ + { + "id": 29508, + "field_id": 68924, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 0, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29509, + "field_id": 68926, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 1, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29510, + "field_id": 68927, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 2, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29511, + "field_id": 68929, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 3, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29512, + "field_id": 68925, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 4, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29513, + "field_id": 68928, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 5, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29514, + "field_id": 68930, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 6, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29515, + "field_id": 68956, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 7, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29516, + "field_id": 68957, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 8, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2026-03-15T19:59:30.174602+00:00", + "updated_on": "2026-03-15T20:47:21.407799+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68924": "Primary Healthcare Clinics Construction", + "field_68925": null, + "field_68926": [ + 1 + ], + "field_68927": "Build and equip primary healthcare clinics in target underserved regions.", + "field_68928": 33003, + "field_68929": "2024-12-31", + "field_68930": [ + 1 + ], + "field_68956": null, + "field_68957": null + }, + { + "id": 2, + "order": "2.00000000000000000000", + "created_on": "2026-03-15T19:59:30.174673+00:00", + "updated_on": "2026-03-15T20:47:23.184840+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68924": "Online Learning Platform Development", + "field_68925": null, + "field_68926": [ + 4 + ], + "field_68927": "Create a scalable digital platform with curriculum and interactive tools.", + "field_68928": 33002, + "field_68929": "2025-06-30", + "field_68930": [ + 2 + ], + "field_68956": null, + "field_68957": null + }, + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2026-03-15T19:59:30.174704+00:00", + "updated_on": "2026-03-15T20:47:26.765826+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68924": "Rural Water Filtration Systems Installation", + "field_68925": null, + "field_68926": [ + 3 + ], + "field_68927": "Deploy sustainable water filtration units to improve clean water access.", + "field_68928": 33004, + "field_68929": "2024-09-15", + "field_68930": [ + 5 + ], + "field_68956": null, + "field_68957": null + }, + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2026-03-15T19:59:30.174732+00:00", + "updated_on": "2026-03-15T20:47:34.815690+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68924": "AI Startup Incubation Program", + "field_68925": null, + "field_68926": [ + 2 + ], + "field_68927": "Provide mentorship, funding, and resources to AI-driven social impact startups.", + "field_68928": 33005, + "field_68929": "2025-03-31", + "field_68930": [ + 4 + ], + "field_68956": null, + "field_68957": null + }, + { + "id": 5, + "order": "5.00000000000000000000", + "created_on": "2026-03-15T19:59:30.174758+00:00", + "updated_on": "2026-03-15T20:47:41.931232+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68924": "Capacity Building for Local NGOs", + "field_68925": null, + "field_68926": [ + 5 + ], + "field_68927": "Train and support NGOs with management, fundraising, and project execution skills.", + "field_68928": 33003, + "field_68929": "2026-12-31", + "field_68930": [ + 3 + ], + "field_68956": null, + "field_68957": null + } + ], + "data_sync": null, + "field_rules": [] + }, + { + "id": 6319, + "name": "Tasks", + "order": 5, + "fields": [ + { + "id": 68931, + "type": "text", + "name": "Task Name", + "description": null, + "order": 0, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 68932, + "type": "long_text", + "name": "Description", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "long_text_enable_rich_text": true + }, + { + "id": 68933, + "type": "single_select", + "name": "Status", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "select_options": [ + { + "id": 33006, + "value": "To Do", + "color": "gray", + "order": 0 + }, + { + "id": 33007, + "value": "Doing", + "color": "orange", + "order": 1 + }, + { + "id": 33008, + "value": "Blocked", + "color": "red", + "order": 2 + }, + { + "id": 33009, + "value": "Done", + "color": "green", + "order": 3 + } + ], + "single_select_default": null + }, + { + "id": 68934, + "type": "date", + "name": "Due Date", + "description": null, + "order": 5, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_format": "EU", + "date_include_time": false, + "date_time_format": "24", + "date_show_tzinfo": false, + "date_force_timezone": null + }, + { + "id": 68935, + "type": "link_row", + "name": "Deliverable", + "description": null, + "order": 6, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 6318, + "link_row_related_field_id": 68930, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 68936, + "type": "link_row", + "name": "Assignee", + "description": null, + "order": 7, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 6315, + "link_row_related_field_id": 68903, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + } + ], + "views": [ + { + "id": 25795, + "type": "grid", + "name": "All tasks", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "medium", + "field_options": [ + { + "id": 230477, + "field_id": 68931, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230478, + "field_id": 68932, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230479, + "field_id": 68933, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230480, + "field_id": 68934, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230481, + "field_id": 68935, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230482, + "field_id": 68936, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 25796, + "type": "kanban", + "name": "Task board", + "order": 2, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "decorations": [], + "public": false, + "single_select_field_id": 68933, + "field_options": [ + { + "id": 34502, + "field_id": 68931, + "hidden": false, + "order": 32767 + }, + { + "id": 34503, + "field_id": 68932, + "hidden": false, + "order": 32767 + }, + { + "id": 34504, + "field_id": 68933, + "hidden": false, + "order": 32767 + }, + { + "id": 34505, + "field_id": 68934, + "hidden": true, + "order": 32767 + }, + { + "id": 34506, + "field_id": 68935, + "hidden": true, + "order": 32767 + }, + { + "id": 34507, + "field_id": 68936, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 25797, + "type": "calendar", + "name": "Task deadlines", + "order": 3, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "decorations": [], + "public": false, + "date_field_id": 68934, + "field_options": [ + { + "id": 18961, + "field_id": 68931, + "hidden": false, + "order": 32767 + }, + { + "id": 18962, + "field_id": 68932, + "hidden": true, + "order": 32767 + }, + { + "id": 18963, + "field_id": 68933, + "hidden": true, + "order": 32767 + }, + { + "id": 18964, + "field_id": 68934, + "hidden": true, + "order": 32767 + }, + { + "id": 18965, + "field_id": 68935, + "hidden": true, + "order": 32767 + }, + { + "id": 18966, + "field_id": 68936, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 25798, + "type": "grid", + "name": "Grouped by assignee", + "order": 4, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [ + { + "id": 3119, + "field_id": 68936, + "order": "ASC" + } + ], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 230483, + "field_id": 68931, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230484, + "field_id": 68932, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230485, + "field_id": 68933, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230486, + "field_id": 68934, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230487, + "field_id": 68935, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230488, + "field_id": 68936, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 25799, + "type": "form", + "name": "New task", + "order": 5, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "public": false, + "title": "New task", + "description": "", + "cover_image": null, + "logo_image": null, + "submit_text": "Submit", + "submit_action": "MESSAGE", + "submit_action_message": "", + "submit_action_redirect_url": "", + "field_options": [ + { + "id": 29517, + "field_id": 68931, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29518, + "field_id": 68932, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29519, + "field_id": 68933, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29520, + "field_id": 68934, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29521, + "field_id": 68935, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29522, + "field_id": 68936, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2026-03-15T19:59:34.096099+00:00", + "updated_on": "2026-03-20T07:56:32.088475+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68931": "Site Survey for Clinic Locations", + "field_68932": "Conduct surveys to identify optimal locations for primary healthcare clinics in target regions.", + "field_68933": 33007, + "field_68934": "2026-03-20", + "field_68935": [ + 1 + ], + "field_68936": [ + 1 + ] + }, + { + "id": 2, + "order": "2.00000000000000000000", + "created_on": "2026-03-15T19:59:34.096247+00:00", + "updated_on": "2026-03-16T00:22:36.404461+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68931": "Develop Curriculum Content", + "field_68932": "Create educational modules and interactive tools for the digital learning platform.", + "field_68933": 33009, + "field_68934": "2026-03-25", + "field_68935": [ + 2 + ], + "field_68936": [ + 5 + ] + }, + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2026-03-15T19:59:34.096280+00:00", + "updated_on": "2026-03-15T20:54:22.832051+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68931": "Install Water Filtration Units", + "field_68932": "Deploy and test sustainable water filtration systems in selected rural communities.", + "field_68933": 33008, + "field_68934": "2024-08-15", + "field_68935": [ + 5 + ], + "field_68936": [ + 3 + ] + }, + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2026-03-15T19:59:34.096307+00:00", + "updated_on": "2026-03-16T01:41:57.351546+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68931": "Mentor AI Startup Cohort", + "field_68932": "Provide mentorship, resources, and seed funding to AI-driven social impact startups.", + "field_68933": 33007, + "field_68934": "2026-03-31", + "field_68935": [ + 4 + ], + "field_68936": [ + 4 + ] + }, + { + "id": 5, + "order": "5.00000000000000000000", + "created_on": "2026-03-15T19:59:34.096333+00:00", + "updated_on": "2026-03-15T20:54:28.522469+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68931": "Conduct NGO Capacity Workshops", + "field_68932": "Run training sessions on management, fundraising, and project execution for local NGOs.", + "field_68933": 33006, + "field_68934": "2026-06-30", + "field_68935": [ + 3 + ], + "field_68936": [ + 2 + ] + } + ], + "data_sync": null, + "field_rules": [] + }, + { + "id": 6320, + "name": "KPIs", + "order": 6, + "fields": [ + { + "id": 68937, + "type": "text", + "name": "Name", + "description": null, + "order": 2, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 68938, + "type": "formula", + "name": "KPI ID", + "description": null, + "order": 0, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_separator": "", + "date_time_format": null, + "number_decimal_places": null, + "array_formula_type": null, + "date_include_time": null, + "number_prefix": "", + "error": null, + "number_suffix": "", + "date_format": null, + "nullable": false, + "date_force_timezone": null, + "duration_format": null, + "date_show_tzinfo": null, + "formula": "concat('KPI00', row_id())", + "formula_type": "text" + }, + { + "id": 68939, + "type": "long_text", + "name": "Description", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "long_text_enable_rich_text": true + }, + { + "id": 68940, + "type": "number", + "name": "Target Value", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_decimal_places": 2, + "number_negative": false, + "number_prefix": "$", + "number_suffix": "", + "number_separator": "COMMA_PERIOD", + "number_default": null + }, + { + "id": 68941, + "type": "single_select", + "name": "Unit of Measure", + "description": null, + "order": 5, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "select_options": [ + { + "id": 33010, + "value": "Count", + "color": "blue", + "order": 0 + }, + { + "id": 33011, + "value": "Percentage (%)", + "color": "green", + "order": 1 + }, + { + "id": 33012, + "value": "Currency (EUR)", + "color": "orange", + "order": 2 + }, + { + "id": 33013, + "value": "Hours", + "color": "purple", + "order": 3 + }, + { + "id": 33014, + "value": "Days", + "color": "gray", + "order": 4 + } + ], + "single_select_default": null + }, + { + "id": 68942, + "type": "single_select", + "name": "Priority", + "description": null, + "order": 6, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "select_options": [ + { + "id": 33015, + "value": "High", + "color": "red", + "order": 0 + }, + { + "id": 33016, + "value": "Medium", + "color": "orange", + "order": 1 + }, + { + "id": 33017, + "value": "Low", + "color": "gray", + "order": 2 + } + ], + "single_select_default": null + }, + { + "id": 68943, + "type": "link_row", + "name": "Program", + "description": null, + "order": 7, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 6317, + "link_row_related_field_id": 68923, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 68944, + "type": "link_row", + "name": "KPI Updates", + "description": null, + "order": 9, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 6321, + "link_row_related_field_id": 68949, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 68958, + "type": "rollup", + "name": "Current Total Value", + "description": null, + "order": 10, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_separator": "COMMA_PERIOD", + "date_time_format": null, + "number_decimal_places": 2, + "array_formula_type": null, + "date_include_time": null, + "number_prefix": "$", + "error": null, + "number_suffix": "", + "date_format": null, + "nullable": false, + "date_force_timezone": null, + "duration_format": null, + "date_show_tzinfo": null, + "through_field_id": 68944, + "target_field_id": 68947, + "rollup_function": "sum" + }, + { + "id": 68961, + "type": "formula", + "name": "Achievement Percentage", + "description": null, + "order": 11, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_separator": "", + "date_time_format": null, + "number_decimal_places": 2, + "array_formula_type": null, + "date_include_time": null, + "number_prefix": "", + "error": null, + "number_suffix": "%", + "date_format": null, + "nullable": false, + "date_force_timezone": null, + "duration_format": null, + "date_show_tzinfo": null, + "formula": "if(field('Target Value') > 0, (field('Current Total Value') / field('Target Value')) * 100, 0)", + "formula_type": "number" + } + ], + "views": [ + { + "id": 25800, + "type": "grid", + "name": "All KPIs", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 230489, + "field_id": 68938, + "width": 200, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230490, + "field_id": 68937, + "width": 200, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230491, + "field_id": 68939, + "width": 200, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230492, + "field_id": 68941, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230493, + "field_id": 68942, + "width": 200, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230494, + "field_id": 68943, + "width": 200, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230495, + "field_id": 68944, + "width": 200, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230496, + "field_id": 68940, + "width": 200, + "hidden": false, + "order": 7, + "aggregation_type": "sum", + "aggregation_raw_type": "sum" + }, + { + "id": 230497, + "field_id": 68958, + "width": 200, + "hidden": false, + "order": 8, + "aggregation_type": "sum", + "aggregation_raw_type": "sum" + }, + { + "id": 230498, + "field_id": 68961, + "width": 216, + "hidden": false, + "order": 9, + "aggregation_type": "average", + "aggregation_raw_type": "average" + } + ] + }, + { + "id": 25801, + "type": "kanban", + "name": "KPIs by priority", + "order": 2, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "decorations": [], + "public": false, + "single_select_field_id": 68942, + "field_options": [ + { + "id": 34509, + "field_id": 68937, + "hidden": false, + "order": 32767 + }, + { + "id": 34508, + "field_id": 68938, + "hidden": false, + "order": 32767 + }, + { + "id": 34510, + "field_id": 68939, + "hidden": false, + "order": 32767 + }, + { + "id": 34511, + "field_id": 68940, + "hidden": true, + "order": 32767 + }, + { + "id": 34512, + "field_id": 68941, + "hidden": true, + "order": 32767 + }, + { + "id": 34513, + "field_id": 68942, + "hidden": true, + "order": 32767 + }, + { + "id": 34514, + "field_id": 68943, + "hidden": true, + "order": 32767 + }, + { + "id": 34515, + "field_id": 68944, + "hidden": true, + "order": 32767 + }, + { + "id": 34516, + "field_id": 68958, + "hidden": true, + "order": 32767 + }, + { + "id": 34517, + "field_id": 68961, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 25802, + "type": "grid", + "name": "Grouped by program", + "order": 3, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [ + { + "id": 3120, + "field_id": 68943, + "order": "ASC" + } + ], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 230500, + "field_id": 68937, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230499, + "field_id": 68938, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230501, + "field_id": 68939, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230502, + "field_id": 68940, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230503, + "field_id": 68941, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230504, + "field_id": 68942, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230505, + "field_id": 68943, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230506, + "field_id": 68944, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230507, + "field_id": 68958, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230508, + "field_id": 68961, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 25803, + "type": "gallery", + "name": "KPI portfolio gallery", + "order": 4, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "decorations": [ + { + "id": 6793, + "type": "background_color", + "value_provider_type": "conditional_color", + "value_provider_conf": { + "colors": [ + { + "id": "57ed3e96-016b-4f44-93a4-63f7fedc2818", + "color": "light-purple", + "filters": [ + { + "id": "99e651f7-0ffc-4e39-b47f-7b15c58c4314", + "type": "higher_than_or_equal", + "field": 68958, + "group": null, + "value": "5000" + } + ], + "operator": "AND" + } + ] + }, + "order": 1 + } + ], + "public": false, + "field_options": [ + { + "id": 19305, + "field_id": 68937, + "hidden": false, + "order": 32767 + }, + { + "id": 19304, + "field_id": 68938, + "hidden": false, + "order": 32767 + }, + { + "id": 19306, + "field_id": 68939, + "hidden": false, + "order": 32767 + }, + { + "id": 19307, + "field_id": 68940, + "hidden": true, + "order": 32767 + }, + { + "id": 19308, + "field_id": 68941, + "hidden": true, + "order": 32767 + }, + { + "id": 19309, + "field_id": 68942, + "hidden": true, + "order": 32767 + }, + { + "id": 19310, + "field_id": 68943, + "hidden": true, + "order": 32767 + }, + { + "id": 19311, + "field_id": 68944, + "hidden": true, + "order": 32767 + }, + { + "id": 19312, + "field_id": 68958, + "hidden": true, + "order": 32767 + }, + { + "id": 19313, + "field_id": 68961, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 25804, + "type": "form", + "name": "Define new KPI", + "order": 5, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "public": false, + "title": "Define new KPI", + "description": "", + "cover_image": null, + "logo_image": null, + "submit_text": "Submit", + "submit_action": "MESSAGE", + "submit_action_message": "", + "submit_action_redirect_url": "", + "field_options": [ + { + "id": 29524, + "field_id": 68937, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29523, + "field_id": 68938, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29525, + "field_id": 68939, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29526, + "field_id": 68940, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29527, + "field_id": 68941, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29528, + "field_id": 68942, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29529, + "field_id": 68943, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29530, + "field_id": 68944, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29531, + "field_id": 68958, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29532, + "field_id": 68961, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2026-03-15T19:59:36.920684+00:00", + "updated_on": "2026-03-15T21:02:03.814014+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68937": "Number of Clinics Built", + "field_68938": null, + "field_68939": "Total count of primary healthcare clinics constructed in target regions.", + "field_68940": "40000.00", + "field_68941": 33010, + "field_68942": 33015, + "field_68943": [ + 3 + ], + "field_68944": [ + 2 + ], + "field_68958": null, + "field_68961": null + }, + { + "id": 2, + "order": "2.00000000000000000000", + "created_on": "2026-03-15T19:59:36.920750+00:00", + "updated_on": "2026-03-15T20:57:27.089936+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68937": "Active Users on Platform", + "field_68938": null, + "field_68939": "Number of unique users actively using the digital education platform each month.", + "field_68940": "50000.00", + "field_68941": 33010, + "field_68942": 33016, + "field_68943": [ + 2 + ], + "field_68944": [ + 4 + ], + "field_68958": null, + "field_68961": null + }, + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2026-03-15T19:59:36.920784+00:00", + "updated_on": "2026-03-15T20:57:29.912809+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68937": "Households with Access to Clean Water", + "field_68938": null, + "field_68939": "Percentage of households in the project area that have reliable access to clean water after installation.", + "field_68940": "85.00", + "field_68941": 33011, + "field_68942": 33015, + "field_68943": [ + 1 + ], + "field_68944": [ + 5 + ], + "field_68958": null, + "field_68961": null + }, + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2026-03-15T19:59:36.920814+00:00", + "updated_on": "2026-03-15T20:57:33.264003+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68937": "Startups Graduated", + "field_68938": null, + "field_68939": "Number of AI-driven social impact startups that successfully graduate from the incubation program.", + "field_68940": "10.00", + "field_68941": 33010, + "field_68942": 33017, + "field_68943": [ + 4 + ], + "field_68944": [ + 1 + ], + "field_68958": null, + "field_68961": null + }, + { + "id": 5, + "order": "5.00000000000000000000", + "created_on": "2026-03-15T19:59:36.920843+00:00", + "updated_on": "2026-03-15T21:02:16.841396+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68937": "NGOs Trained", + "field_68938": null, + "field_68939": "Number of local NGOs that complete the capacity building workshops.", + "field_68940": "200.00", + "field_68941": 33010, + "field_68942": 33016, + "field_68943": [ + 5 + ], + "field_68944": [ + 3 + ], + "field_68958": null, + "field_68961": null + } + ], + "data_sync": null, + "field_rules": [] + }, + { + "id": 6321, + "name": "KPI Updates", + "order": 7, + "fields": [ + { + "id": 68945, + "type": "formula", + "name": "Update ID", + "description": null, + "order": 0, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_separator": "", + "date_time_format": null, + "number_decimal_places": null, + "array_formula_type": null, + "date_include_time": null, + "number_prefix": "", + "error": null, + "number_suffix": "", + "date_format": null, + "nullable": false, + "date_force_timezone": null, + "duration_format": null, + "date_show_tzinfo": null, + "formula": "concat('UPD-100', row_id())", + "formula_type": "text" + }, + { + "id": 68946, + "type": "date", + "name": "Date", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_format": "EU", + "date_include_time": false, + "date_time_format": "24", + "date_show_tzinfo": false, + "date_force_timezone": null + }, + { + "id": 68947, + "type": "number", + "name": "Actual Value", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_decimal_places": 2, + "number_negative": false, + "number_prefix": "$", + "number_suffix": "", + "number_separator": "COMMA_PERIOD", + "number_default": null + }, + { + "id": 68948, + "type": "long_text", + "name": "Notes", + "description": null, + "order": 5, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "long_text_enable_rich_text": true + }, + { + "id": 68949, + "type": "link_row", + "name": "KPI", + "description": null, + "order": 6, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 6320, + "link_row_related_field_id": 68944, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 68950, + "type": "link_row", + "name": "Reporter", + "description": null, + "order": 7, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 6315, + "link_row_related_field_id": 68904, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 68959, + "type": "lookup", + "name": "KPI Unit", + "description": null, + "order": 8, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_separator": "", + "date_time_format": null, + "number_decimal_places": null, + "array_formula_type": "single_select", + "date_include_time": null, + "number_prefix": "", + "error": null, + "number_suffix": "", + "date_format": null, + "nullable": true, + "date_force_timezone": null, + "duration_format": null, + "date_show_tzinfo": null, + "through_field_id": 68949, + "through_field_name": "KPI", + "target_field_id": 68941, + "target_field_name": "Unit of Measure" + }, + { + "id": 68960, + "type": "lookup", + "name": "Reporter Role", + "description": null, + "order": 9, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_separator": "", + "date_time_format": null, + "number_decimal_places": null, + "array_formula_type": "single_select", + "date_include_time": null, + "number_prefix": "", + "error": null, + "number_suffix": "", + "date_format": null, + "nullable": true, + "date_force_timezone": null, + "duration_format": null, + "date_show_tzinfo": null, + "through_field_id": 68950, + "through_field_name": "Reporter", + "target_field_id": 68899, + "target_field_name": "Role" + } + ], + "views": [ + { + "id": 25805, + "type": "grid", + "name": "All updates", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "medium", + "field_options": [ + { + "id": 230509, + "field_id": 68945, + "width": 115, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230510, + "field_id": 68946, + "width": 130, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230511, + "field_id": 68947, + "width": 144, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230512, + "field_id": 68948, + "width": 327, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230513, + "field_id": 68949, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230514, + "field_id": 68950, + "width": 146, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230515, + "field_id": 68959, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230516, + "field_id": 68960, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 25806, + "type": "calendar", + "name": "Updates calendar", + "order": 2, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "decorations": [], + "public": false, + "date_field_id": 68946, + "field_options": [ + { + "id": 18967, + "field_id": 68945, + "hidden": false, + "order": 32767 + }, + { + "id": 18968, + "field_id": 68946, + "hidden": true, + "order": 32767 + }, + { + "id": 18969, + "field_id": 68947, + "hidden": true, + "order": 32767 + }, + { + "id": 18970, + "field_id": 68948, + "hidden": true, + "order": 32767 + }, + { + "id": 18971, + "field_id": 68949, + "hidden": true, + "order": 32767 + }, + { + "id": 18972, + "field_id": 68950, + "hidden": true, + "order": 32767 + }, + { + "id": 18973, + "field_id": 68959, + "hidden": true, + "order": 32767 + }, + { + "id": 18974, + "field_id": 68960, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 25807, + "type": "grid", + "name": "Grouped by KPI", + "order": 3, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [ + { + "id": 3121, + "field_id": 68949, + "order": "ASC" + } + ], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 230517, + "field_id": 68945, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230518, + "field_id": 68946, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230519, + "field_id": 68947, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230520, + "field_id": 68948, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230521, + "field_id": 68949, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230522, + "field_id": 68950, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230523, + "field_id": 68959, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230524, + "field_id": 68960, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 25808, + "type": "grid", + "name": "Grouped by reporter", + "order": 4, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [ + { + "id": 3122, + "field_id": 68950, + "order": "ASC" + } + ], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 230525, + "field_id": 68945, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230526, + "field_id": 68946, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230527, + "field_id": 68947, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230528, + "field_id": 68948, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230529, + "field_id": 68949, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230530, + "field_id": 68950, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230531, + "field_id": 68959, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 230532, + "field_id": 68960, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 25809, + "type": "form", + "name": "Submit KPI update", + "order": 5, + "ownership_type": "collaborative", + "owned_by": "juliet@baserow.io", + "public": false, + "title": "Submit KPI update", + "description": "", + "cover_image": null, + "logo_image": null, + "submit_text": "Submit", + "submit_action": "MESSAGE", + "submit_action_message": "", + "submit_action_redirect_url": "", + "field_options": [ + { + "id": 29533, + "field_id": 68945, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29534, + "field_id": 68946, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29535, + "field_id": 68947, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29536, + "field_id": 68948, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29537, + "field_id": 68949, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29538, + "field_id": 68950, + "name": "", + "description": "", + "enabled": true, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29539, + "field_id": 68959, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + }, + { + "id": 29540, + "field_id": 68960, + "name": "", + "description": "", + "enabled": false, + "required": true, + "order": 32767, + "show_when_matching_conditions": false, + "condition_type": "AND", + "conditions": [], + "condition_groups": [], + "field_component": "default", + "include_all_select_options": true, + "allowed_select_options": [] + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2026-03-15T19:59:40.840266+00:00", + "updated_on": "2026-03-15T21:06:02.328468+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68945": null, + "field_68946": "2024-01-15", + "field_68947": "10.00", + "field_68948": "Progress on clinic construction.", + "field_68949": [ + 4 + ], + "field_68950": [ + 1 + ], + "field_68959": null, + "field_68960": null + }, + { + "id": 2, + "order": "2.00000000000000000000", + "created_on": "2026-03-15T19:59:40.840331+00:00", + "updated_on": "2026-03-15T21:06:07.753308+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68945": null, + "field_68946": "2025-02-01", + "field_68947": "30000.00", + "field_68948": "User engagement increasing.", + "field_68949": [ + 1 + ], + "field_68950": [ + 2 + ], + "field_68959": null, + "field_68960": null + }, + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2026-03-15T19:59:40.840362+00:00", + "updated_on": "2026-03-15T21:05:40.218207+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68945": null, + "field_68946": "2024-09-01", + "field_68947": "80.00", + "field_68948": "Water access improved but not yet target.", + "field_68949": [ + 5 + ], + "field_68950": [ + 3 + ], + "field_68959": null, + "field_68960": null + }, + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2026-03-15T19:59:40.840388+00:00", + "updated_on": "2026-03-15T21:05:58.348185+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68945": null, + "field_68946": "2025-04-15", + "field_68947": "8.00", + "field_68948": "AI startup cohort nearing graduation.", + "field_68949": [ + 2 + ], + "field_68950": [ + 4 + ], + "field_68959": null, + "field_68960": null + }, + { + "id": 5, + "order": "5.00000000000000000000", + "created_on": "2026-03-15T19:59:40.840413+00:00", + "updated_on": "2026-03-15T21:05:43.637220+00:00", + "created_by": "juliet@baserow.io", + "last_modified_by": "juliet@baserow.io", + "field_68945": null, + "field_68946": "2026-03-10", + "field_68947": "15.00", + "field_68948": "NGO workshops completed for half of target.", + "field_68949": [ + 3 + ], + "field_68950": [ + 5 + ], + "field_68959": null, + "field_68960": null + } + ], + "data_sync": null, + "field_rules": [] + } + ] + }, + { + "pages": [ + { + "id": 19177, + "name": "__shared__", + "order": 1, + "path": "__shared__", + "path_params": [], + "query_params": [], + "shared": true, + "elements": [ + { + "id": 392463, + "order": "0.50000000000000000000", + "type": "image", + "parent_element_id": 392462, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "image_source_type": "upload", + "image_file_id": { + "name": "mbj7M86bHgIEccwFOyyDenOYWllBs3pw_d570910b4de568550dc3e4548e3233094024b77f3ddab2102aaddce3023fd13f.png", + "original_name": "Default solution logo.png" + }, + "image_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "alt_text": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 392462, + "order": "1.00000000000000000000", + "type": "header", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "share_type": "all", + "pages": [] + }, + { + "id": 392464, + "order": "1.00000000000000000000", + "type": "menu", + "parent_element_id": 392462, + "place_in_container": null, + "css_classes": "", + "visibility": "logged-in", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "menu": { + "link_text_color": "#161617", + "button_text_color": "#ffffff", + "link_active_text_color": "primary", + "button_background_color": "primary", + "button_hover_text_color": "#ffffff", + "button_active_text_color": "#ffffff", + "link_hover_text_decoration": [ + false, + false, + false, + false + ], + "link_active_text_decoration": [ + false, + false, + false, + false + ], + "link_default_text_decoration": [ + false, + false, + false, + false + ], + "button_hover_background_color": "primary", + "button_active_background_color": "primary" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "orientation": "horizontal", + "alignment": "right", + "menu_items": [ + { + "id": 135056, + "variant": "link", + "type": "link", + "menu_item_order": 0, + "uid": "12a9b06a-c997-4df5-937e-840e8a41c332", + "name": "Dashboard", + "navigation_type": "page", + "navigate_to_page_id": 19179, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 135057, + "variant": "link", + "type": "link", + "menu_item_order": 1, + "uid": "0f6cbf3c-8b2b-4363-8af3-08603a75081d", + "name": "KPI Tracker", + "navigation_type": "page", + "navigate_to_page_id": 19181, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 135058, + "variant": "link", + "type": "separator", + "menu_item_order": 2, + "uid": "f94dfcde-3b17-4a03-a706-a781af0f6a5c", + "name": "Page", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 135059, + "variant": "link", + "type": "link", + "menu_item_order": 3, + "uid": "1524ce00-dffc-45df-8a73-2f67c4d0f2cf", + "name": "My Tasks", + "navigation_type": "page", + "navigate_to_page_id": 19180, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [ + { + "name": "deliverable_rowID", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + } + ], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 135060, + "variant": "link", + "type": "button", + "menu_item_order": 4, + "uid": "83011563-edd3-4255-8139-d4d7983c050c", + "name": "Log Out", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + } + ] + }, + { + "id": 392465, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 392462, + "place_in_container": null, + "css_classes": "", + "visibility": "logged-in", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Welcome, ',get('user.username'))" + }, + "format": "plain" + } + ], + "data_sources": [ + { + "id": 54818, + "name": "Current User Profile", + "order": "1.00000000000000000000", + "service": { + "id": 70103, + "integration_id": 1372, + "type": "local_baserow_get_row", + "sample_data": null, + "table_id": 6315, + "view_id": null, + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + } + } + ], + "workflow_actions": [ + { + "id": 41586, + "type": "logout", + "order": 1, + "page_id": 19177, + "element_id": 392464, + "event": "83011563-edd3-4255-8139-d4d7983c050c_click" + } + ], + "visibility": "all", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 19178, + "name": "Login Page", + "order": 1, + "path": "/", + "path_params": [], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 392466, + "order": "0.50000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Login'" + }, + "level": 1 + }, + { + "id": 392467, + "order": "1.00000000000000000000", + "type": "auth_form", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "input": {} + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "small", + "style_width_child": "normal", + "user_source_id": 861, + "login_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + } + ], + "data_sources": [], + "workflow_actions": [ + { + "id": 41587, + "type": "open_page", + "order": 1, + "page_id": 19178, + "element_id": 392467, + "event": "after_login", + "navigation_type": "page", + "navigate_to_page_id": 19179, + "page_parameters": [], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self" + } + ], + "visibility": "all", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 19179, + "name": "Executive Dashboard", + "order": 2, + "path": "/dashboard", + "path_params": [], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 392472, + "order": "0.33333333333333331483", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Organizational Program Health'" + }, + "level": 1 + }, + { + "id": 392468, + "order": "0.50000000000000000000", + "type": "simple_container", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 392469, + "order": "1.00000000000000000000", + "type": "simple_container", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 392470, + "order": "1.00000000000000000000", + "type": "column", + "parent_element_id": 392468, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 1, + "style_padding_top": 10, + "style_margin_top": 40, + "style_border_bottom_color": "border", + "style_border_bottom_size": 1, + "style_padding_bottom": 10, + "style_margin_bottom": 40, + "style_border_left_color": "border", + "style_border_left_size": 1, + "style_padding_left": 20, + "style_margin_left": 10, + "style_border_right_color": "border", + "style_border_right_size": 1, + "style_padding_right": 20, + "style_margin_right": 10, + "style_background_radius": 0, + "style_border_radius": 8, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 1, + "column_gap": 20, + "alignment": "top" + }, + { + "id": 392473, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": 392469, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Program Summary'" + }, + "level": 1 + }, + { + "id": 392474, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": 392471, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Donor Portfolio'" + }, + "level": 1 + }, + { + "id": 392475, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": 392470, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Global KPI Achievement'" + }, + "level": 3 + }, + { + "id": 392471, + "order": "2.00000000000000000000", + "type": "simple_container", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 392476, + "order": "2.00000000000000000000", + "type": "table", + "parent_element_id": 392469, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 54819, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "4aca2ddf-ce76-4a57-ad08-2781335f9a3c", + "name": "Name", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68913')" + } + } + }, + { + "uid": "cee9f5a5-6162-4068-bf2e-642b562222de", + "name": "Status", + "type": "tags", + "styles": {}, + "config": { + "values": { + "mode": "simple", + "version": "0.1", + "formula": "concat('','\n',get('current_record.field_68918.value'))" + }, + "colors_is_formula": true, + "colors": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68918.color')" + } + } + }, + { + "uid": "767cfc3c-c7fe-4477-a063-58bb23fd9380", + "name": "Start Date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68919')" + } + } + }, + { + "uid": "e4c106ae-83ea-4c4f-b628-8b610751d557", + "name": "End Date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68920')" + } + } + }, + { + "uid": "8182929a-8916-47f3-a73a-523f2d6b5f90", + "name": "Total Budget", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('$',get('current_record.field_68921'))" + } + } + }, + { + "uid": "a5779c3a-519d-4d73-b915-4163732469cf", + "name": "", + "type": "button", + "styles": { + "cell": { + "table_cell_alignment": "right" + } + }, + "config": { + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'View Deliverables >'" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + }, + { + "id": 392477, + "order": "2.00000000000000000000", + "type": "table", + "parent_element_id": 392471, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 54820, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "fb52b1be-be09-4a02-b9df-552e3c0f8384", + "name": "Name", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68906')" + } + } + }, + { + "uid": "35b5cd9f-2638-4dcb-9954-68f455dacd54", + "name": "Contact Person", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68908')" + } + } + }, + { + "uid": "0831c161-b4e9-4fea-bbe8-41f1687f166f", + "name": "Contact Email", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68909')" + } + } + }, + { + "uid": "fd1f0387-7799-4511-9c09-d63bb21c24b5", + "name": "Website", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "custom", + "navigate_to_page_id": null, + "page_parameters": [], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68910')" + }, + "target": "blank", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68910')" + }, + "variant": "link" + } + }, + { + "uid": "17303326-51b5-4d64-84d4-24d8afb05575", + "name": "Active Donor", + "type": "boolean", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68911')" + } + } + }, + { + "uid": "34fd76e6-9ce7-4e73-8c85-1885106d1b38", + "name": "Funded Programs", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68912.*.value')" + } + } + }, + { + "uid": "022917d0-6ba5-4b81-a5fe-aa41f1ed755b", + "name": "", + "type": "button", + "styles": {}, + "config": { + "label": { + "mode": "simple", + "version": "0.1", + "formula": "concat('','\n','View Donor >')" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + }, + { + "id": 392478, + "order": "2.00000000000000000000", + "type": "heading", + "parent_element_id": 392470, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.54821.result'),'%')" + }, + "level": 1 + }, + { + "id": 392479, + "order": "3.00000000000000000000", + "type": "text", + "parent_element_id": 392470, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Overall KPI Target Met (%)'" + }, + "format": "plain" + } + ], + "data_sources": [ + { + "id": 54819, + "name": "Program Summary", + "order": "1.00000000000000000000", + "service": { + "id": 70104, + "integration_id": 1372, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 6317, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "default_result_count": 20 + } + }, + { + "id": 54820, + "name": "Donor Portfolio", + "order": "2.00000000000000000000", + "service": { + "id": 70105, + "integration_id": 1372, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 6316, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "default_result_count": 20 + } + }, + { + "id": 54821, + "name": "Global KPI Achievement", + "order": "3.00000000000000000000", + "service": { + "id": 70106, + "integration_id": 1372, + "type": "local_baserow_aggregate_rows", + "sample_data": null, + "table_id": 6320, + "view_id": null, + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "field_id": 68961, + "aggregation_type": "average" + } + } + ], + "workflow_actions": [ + { + "id": 41588, + "type": "open_page", + "order": 1, + "page_id": 19179, + "element_id": 392477, + "event": "022917d0-6ba5-4b81-a5fe-aa41f1ed755b_click", + "navigation_type": "page", + "navigate_to_page_id": 19183, + "page_parameters": [], + "query_parameters": [ + { + "name": "donor_rowID", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self" + }, + { + "id": 41589, + "type": "open_page", + "order": 1, + "page_id": 19179, + "element_id": 392476, + "event": "a5779c3a-519d-4d73-b915-4163732469cf_click", + "navigation_type": "page", + "navigate_to_page_id": 19182, + "page_parameters": [], + "query_parameters": [ + { + "name": "program-rowID", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self" + } + ], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [ + "Administrator", + "Executive Viewer", + "Program Manager" + ] + }, + { + "id": 19180, + "name": "Task Execution Board", + "order": 3, + "path": "/task-execution-board", + "path_params": [], + "query_params": [ + { + "name": "deliverable_rowID", + "type": "numeric" + } + ], + "shared": false, + "elements": [ + { + "id": 392485, + "order": "0.33333333333333331483", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Task Execution Board'" + }, + "level": 1 + }, + { + "id": 392480, + "order": "0.50000000000000000000", + "type": "simple_container", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 392492, + "order": "0.50000000000000000000", + "type": "heading", + "parent_element_id": 392490, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68931')" + }, + "level": 2 + }, + { + "id": 392481, + "order": "1.00000000000000000000", + "type": "simple_container", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 392482, + "order": "1.00000000000000000000", + "type": "form_container", + "parent_element_id": 392480, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "submit_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Search '" + }, + "reset_initial_values_post_submission": false + }, + { + "id": 392484, + "order": "1.00000000000000000000", + "type": "record_selector", + "parent_element_id": 392482, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 54823, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [ + { + "schema_property": "field_68924", + "filterable": false, + "sortable": false, + "searchable": true + } + ], + "required": false, + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Filter by deliverables'" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('','\n','')" + }, + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "multiple": false, + "option_name_suffix": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 392486, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": 392481, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "is_empty(get('page_parameter.deliverable_rowID')) = false" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.54822.0.field_68935.0.value'),' Tasks')" + }, + "level": 1 + }, + { + "id": 392489, + "order": "1.00000000000000000000", + "type": "repeat", + "parent_element_id": 392483, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "header_button": {} + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 54822, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [ + { + "schema_property": "field_68931", + "filterable": false, + "sortable": true, + "searchable": false + } + ], + "orientation": "horizontal", + "items_per_row": { + "tablet": 2, + "desktop": 2, + "smartphone": 2 + }, + "horizontal_gap": 0, + "vertical_gap": 0 + }, + { + "id": 392490, + "order": "1.00000000000000000000", + "type": "simple_container", + "parent_element_id": 392489, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 1, + "style_padding_top": 10, + "style_margin_top": 10, + "style_border_bottom_color": "border", + "style_border_bottom_size": 1, + "style_padding_bottom": 10, + "style_margin_bottom": 10, + "style_border_left_color": "border", + "style_border_left_size": 1, + "style_padding_left": 10, + "style_margin_left": 10, + "style_border_right_color": "border", + "style_border_right_size": 1, + "style_padding_right": 10, + "style_margin_right": 10, + "style_background_radius": 0, + "style_border_radius": 8, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 392499, + "order": "1.00000000000000000000", + "type": "column", + "parent_element_id": 392491, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 20, + "alignment": "top" + }, + { + "id": 392500, + "order": "1.00000000000000000000", + "type": "datetime_picker", + "parent_element_id": 392499, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Due Date'" + }, + "required": false, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68934')" + }, + "date_format": "EU", + "include_time": false, + "time_format": "24" + }, + { + "id": 392501, + "order": "1.00000000000000000000", + "type": "choice", + "parent_element_id": 392499, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Status'" + }, + "required": false, + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68933.id')" + }, + "options": [], + "multiple": false, + "show_as_dropdown": true, + "option_type": "formulas", + "formula_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source_context.54824.field_68933.*.id')" + }, + "formula_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source_context.54824.field_68933.*.value')" + } + }, + { + "id": 392487, + "order": "1.50000000000000000000", + "type": "heading", + "parent_element_id": 392481, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "is_empty(get('page_parameter.deliverable_rowID')) = true" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'My Assigned Tasks'" + }, + "level": 1 + }, + { + "id": 392488, + "order": "1.50000000000000000000", + "type": "button", + "parent_element_id": 392480, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "is_empty(get('page_parameter.deliverable_rowID')) = false" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_text_color": "error", + "button_border_color": "transparent", + "button_hover_text_color": "error", + "button_vertical_padding": 0, + "button_active_text_color": "error", + "button_horizontal_padding": 0, + "button_hover_border_color": "transparent", + "button_active_border_color": "transparent", + "button_hover_background_color": "transparent" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Reset Filters x'" + } + }, + { + "id": 392493, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 392490, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68932')" + }, + "format": "plain" + }, + { + "id": 392494, + "order": "3.00000000000000000000", + "type": "text", + "parent_element_id": 392490, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('**Deliverable**: ',get('current_record.field_68935.*.value'))" + }, + "format": "markdown" + }, + { + "id": 392483, + "order": "4.00000000000000000000", + "type": "simple_container", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 392495, + "order": "5.00000000000000000000", + "type": "text", + "parent_element_id": 392490, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('**Assignee**: ',get('current_record.field_68936.*.value'))" + }, + "format": "markdown" + }, + { + "id": 392496, + "order": "5.50000000000000000000", + "type": "text", + "parent_element_id": 392490, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('**Status**: ',get('current_record.field_68933.value'))" + }, + "format": "markdown" + }, + { + "id": 392497, + "order": "5.66666666666666696273", + "type": "text", + "parent_element_id": 392490, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('**Due Date**: ',get('current_record.field_68934'))" + }, + "format": "markdown" + }, + { + "id": 392498, + "order": "5.75000000000000000000", + "type": "heading", + "parent_element_id": 392490, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 1, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Edit Task'" + }, + "level": 4 + }, + { + "id": 392491, + "order": "6.00000000000000000000", + "type": "form_container", + "parent_element_id": 392490, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "submit_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "concat('','\n','Update Task')" + }, + "reset_initial_values_post_submission": true + } + ], + "data_sources": [ + { + "id": 54822, + "name": "My Tasks (Filtered by Deliverable)", + "order": "1.00000000000000000000", + "service": { + "id": 70107, + "integration_id": 1372, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 6319, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 68935, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.deliverable_rowID')" + }, + "value_is_formula": true + }, + { + "field_id": 68936, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('user.id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 54823, + "name": "All Deliverables (Filter)", + "order": "3.00000000000000000000", + "service": { + "id": 70108, + "integration_id": 1372, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 6318, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "default_result_count": 20 + } + }, + { + "id": 54824, + "name": "All Tasks (Dropdown Options)", + "order": "4.00000000000000000000", + "service": { + "id": 70109, + "integration_id": 1372, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 6319, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "default_result_count": 20 + } + } + ], + "workflow_actions": [ + { + "id": 41590, + "type": "refresh_data_source", + "order": 1, + "page_id": 19180, + "element_id": 392482, + "event": "submit", + "data_source_id": 54823 + }, + { + "id": 41591, + "type": "open_page", + "order": 1, + "page_id": 19180, + "element_id": 392488, + "event": "click", + "navigation_type": "page", + "navigate_to_page_id": 19180, + "page_parameters": [], + "query_parameters": [ + { + "name": "deliverable_rowID", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self" + }, + { + "id": 41592, + "type": "update_row", + "order": 1, + "page_id": 19180, + "element_id": 392491, + "event": "submit", + "service": { + "id": 70119, + "integration_id": 1372, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 6319, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + }, + "field_mappings": [ + { + "field_id": 68933, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.392501')" + }, + "enabled": true + }, + { + "field_id": 68934, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.392500')" + }, + "enabled": true + } + ] + } + }, + { + "id": 41593, + "type": "open_page", + "order": 2, + "page_id": 19180, + "element_id": 392482, + "event": "submit", + "navigation_type": "page", + "navigate_to_page_id": 19180, + "page_parameters": [], + "query_parameters": [ + { + "name": "deliverable_rowID", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.392484')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self" + }, + { + "id": 41594, + "type": "refresh_data_source", + "order": 2, + "page_id": 19180, + "element_id": 392488, + "event": "click", + "data_source_id": 54823 + }, + { + "id": 41595, + "type": "refresh_data_source", + "order": 2, + "page_id": 19180, + "element_id": 392491, + "event": "submit", + "data_source_id": 54822 + }, + { + "id": 41596, + "type": "notification", + "order": 3, + "page_id": 19180, + "element_id": 392491, + "event": "submit", + "title": { + "mode": "simple", + "version": "0.1", + "formula": "'Task Updated'" + }, + "description": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_68931'),' has been updated.')" + } + }, + { + "id": 41597, + "type": "open_page", + "order": 4, + "page_id": 19180, + "element_id": 392491, + "event": "submit", + "navigation_type": "page", + "navigate_to_page_id": 19180, + "page_parameters": [], + "query_parameters": [ + { + "name": "deliverable_rowID", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.deliverable_rowID')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self" + } + ], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 19181, + "name": "KPI Performance Tracking", + "order": 4, + "path": "/kpi-management", + "path_params": [], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 392505, + "order": "0.50000000000000000000", + "type": "heading", + "parent_element_id": 392504, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Add New KPI Update'" + }, + "level": 1 + }, + { + "id": 392506, + "order": "0.50000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'KPI Performance Tracking'" + }, + "level": 1 + }, + { + "id": 392512, + "order": "0.50000000000000000000", + "type": "input_text", + "parent_element_id": 392511, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Actual Value $'" + }, + "required": false, + "validation_type": "any", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "is_multiline": false, + "rows": 3, + "input_type": "text" + }, + { + "id": 392513, + "order": "0.66666666666666662966", + "type": "input_text", + "parent_element_id": 392511, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Notes'" + }, + "required": false, + "validation_type": "any", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "is_multiline": false, + "rows": 3, + "input_type": "text" + }, + { + "id": 392502, + "order": "1.00000000000000000000", + "type": "simple_container", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 392507, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": 392502, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'KPI Performance Monitoring'" + }, + "level": 1 + }, + { + "id": 392508, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": 392503, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Historical Updates'" + }, + "level": 1 + }, + { + "id": 392511, + "order": "1.00000000000000000000", + "type": "form_container", + "parent_element_id": 392504, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "submit_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "reset_initial_values_post_submission": false + }, + { + "id": 392514, + "order": "1.00000000000000000000", + "type": "datetime_picker", + "parent_element_id": 392511, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Date'" + }, + "required": false, + "default_value": { + "mode": "advanced", + "version": "0.1", + "formula": "today()" + }, + "date_format": "EU", + "include_time": false, + "time_format": "24" + }, + { + "id": 392503, + "order": "2.00000000000000000000", + "type": "simple_container", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 392509, + "order": "2.00000000000000000000", + "type": "table", + "parent_element_id": 392502, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 54825, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [ + { + "schema_property": "field_68937", + "filterable": false, + "sortable": true, + "searchable": true + }, + { + "schema_property": "field_68941", + "filterable": true, + "sortable": false, + "searchable": false + }, + { + "schema_property": "field_68958", + "filterable": false, + "sortable": true, + "searchable": false + } + ], + "fields": [ + { + "uid": "63c22ba3-c022-403e-b62c-a037725d8da3", + "name": "Name", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68937')" + } + } + }, + { + "uid": "ca223bb5-b313-4731-821d-b870587f9556", + "name": "Target Value", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68940')" + } + } + }, + { + "uid": "96f74345-5886-4cdd-b0e8-5b6a21882832", + "name": "Current Total Value", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('$',get('current_record.field_68958'))" + } + } + }, + { + "uid": "22f2b4db-1761-47c0-b256-c3eef47696f6", + "name": "Achievement Percentage", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_68961'),'%')" + } + } + }, + { + "uid": "e6607aed-e9a3-4039-b9ac-4aa241c93750", + "name": "Program", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68943.*.value')" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + }, + { + "id": 392510, + "order": "2.00000000000000000000", + "type": "table", + "parent_element_id": 392503, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 54826, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [ + { + "schema_property": "field_68950", + "filterable": false, + "sortable": false, + "searchable": true + }, + { + "schema_property": "field_68960", + "filterable": true, + "sortable": false, + "searchable": false + }, + { + "schema_property": "field_68946", + "filterable": true, + "sortable": true, + "searchable": false + }, + { + "schema_property": "field_68947", + "filterable": true, + "sortable": false, + "searchable": false + } + ], + "fields": [ + { + "uid": "c9f866be-43f4-41a5-ab32-022803374d8f", + "name": "Date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68946')" + } + } + }, + { + "uid": "5ed1a449-279b-4a39-b9e2-66201aec2cc0", + "name": "Actual Value", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('$',get('current_record.field_68947'))" + } + } + }, + { + "uid": "6436fc96-df73-4817-aeac-1eed942fc363", + "name": "Notes", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68948')" + } + } + }, + { + "uid": "90b84ae3-aeb6-4804-aaa9-a3384ae7d2ba", + "name": "KPI", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68949.*.value')" + } + } + }, + { + "uid": "5fc0c1b3-c010-4539-951e-cd1ebd7d0789", + "name": "Reporter", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68950.*.value')" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + }, + { + "id": 392515, + "order": "2.00000000000000000000", + "type": "record_selector", + "parent_element_id": 392511, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 54825, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "required": false, + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'KPI'" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "multiple": false, + "option_name_suffix": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 392504, + "order": "3.00000000000000000000", + "type": "simple_container", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 392516, + "order": "3.00000000000000000000", + "type": "record_selector", + "parent_element_id": 392511, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 54827, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "required": false, + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Reporter'" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "multiple": false, + "option_name_suffix": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + } + ], + "data_sources": [ + { + "id": 54825, + "name": "KPI List", + "order": "1.00000000000000000000", + "service": { + "id": 70110, + "integration_id": 1372, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 6320, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "default_result_count": 20 + } + }, + { + "id": 54826, + "name": "Historical Updates", + "order": "2.00000000000000000000", + "service": { + "id": 70111, + "integration_id": 1372, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 6321, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "default_result_count": 20 + } + }, + { + "id": 54827, + "name": "Reporter List", + "order": "3.00000000000000000000", + "service": { + "id": 70112, + "integration_id": 1372, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 6315, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "default_result_count": 20 + } + } + ], + "workflow_actions": [ + { + "id": 41598, + "type": "create_row", + "order": 1, + "page_id": 19181, + "element_id": 392511, + "event": "submit", + "service": { + "id": 70120, + "integration_id": 1372, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 6321, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "field_mappings": [ + { + "field_id": 68946, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.392514')" + }, + "enabled": true + }, + { + "field_id": 68947, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.392512')" + }, + "enabled": true + }, + { + "field_id": 68948, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.392513')" + }, + "enabled": true + }, + { + "field_id": 68949, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.392515')" + }, + "enabled": true + }, + { + "field_id": 68950, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.392516')" + }, + "enabled": true + } + ] + } + }, + { + "id": 41599, + "type": "refresh_data_source", + "order": 2, + "page_id": 19181, + "element_id": 392511, + "event": "submit", + "data_source_id": 54826 + }, + { + "id": 41600, + "type": "notification", + "order": 3, + "page_id": 19181, + "element_id": 392511, + "event": "submit", + "title": { + "mode": "simple", + "version": "0.1", + "formula": "'Update Added'" + }, + "description": { + "mode": "simple", + "version": "0.1", + "formula": "'New KPI update'" + } + } + ], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [ + "Administrator", + "Program Manager" + ] + }, + { + "id": 19182, + "name": "Program Health & Deliverables", + "order": 5, + "path": "/program-health-and-deliverables", + "path_params": [], + "query_params": [ + { + "name": "program-rowID", + "type": "numeric" + } + ], + "shared": false, + "elements": [ + { + "id": 392521, + "order": "0.50000000000000000000", + "type": "heading", + "parent_element_id": 392519, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "is_empty(get('page_parameter.program-rowID')) = false" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.54828.field_68913'),' Deliverables')" + }, + "level": 1 + }, + { + "id": 392522, + "order": "0.50000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Program Health & Deliverables'" + }, + "level": 1 + }, + { + "id": 392523, + "order": "0.66666666666666662966", + "type": "heading", + "parent_element_id": 392519, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "is_empty(get('page_parameter.program-rowID'))" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'All Active Deliverables'" + }, + "level": 1 + }, + { + "id": 392517, + "order": "1.00000000000000000000", + "type": "simple_container", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 392518, + "order": "1.00000000000000000000", + "type": "form_container", + "parent_element_id": 392517, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "submit_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Search'" + }, + "reset_initial_values_post_submission": false + }, + { + "id": 392524, + "order": "1.00000000000000000000", + "type": "table", + "parent_element_id": 392519, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 54830, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "70e46c89-ecaa-4590-93b3-824113318820", + "name": "Name", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68924')" + } + } + }, + { + "uid": "91606ef7-42ac-45bc-8352-3d6b8ce77bf5", + "name": "Program", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68926.*.value')" + } + } + }, + { + "uid": "7d9ef7d9-d165-48ec-a3d3-5ef62fd67d11", + "name": "Status", + "type": "tags", + "styles": {}, + "config": { + "values": { + "mode": "simple", + "version": "0.1", + "formula": "concat('','\n',get('current_record.field_68928.value'))" + }, + "colors_is_formula": true, + "colors": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68928.color')" + } + } + }, + { + "uid": "4b798c71-d036-4563-b231-c3f0a954e73a", + "name": "Due Date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68929')" + } + } + }, + { + "uid": "86d44b03-9d1e-4f51-8e2c-21149a68a988", + "name": "Tasks", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68930.*.value')" + } + } + }, + { + "uid": "7590dee5-e8d5-4c54-9f13-e96156156278", + "name": "", + "type": "button", + "styles": {}, + "config": { + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'View Tasks >'" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + }, + { + "id": 392519, + "order": "2.00000000000000000000", + "type": "simple_container", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 392520, + "order": "2.00000000000000000000", + "type": "record_selector", + "parent_element_id": 392518, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 54829, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [ + { + "schema_property": "field_68913", + "filterable": false, + "sortable": false, + "searchable": true + } + ], + "required": false, + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Select a program'" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "multiple": false, + "option_name_suffix": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 392525, + "order": "4.00000000000000000000", + "type": "button", + "parent_element_id": 392517, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "is_empty(get('page_parameter.program-rowID')) = false" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_text_color": "error", + "button_border_color": "transparent", + "button_hover_text_color": "error", + "button_vertical_padding": 0, + "button_active_text_color": "error", + "button_horizontal_padding": 0, + "button_hover_border_color": "transparent", + "button_active_border_color": "transparent", + "button_hover_background_color": "transparent" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Reset Filters x'" + } + } + ], + "data_sources": [ + { + "id": 54828, + "name": "Selected Program", + "order": "1.00000000000000000000", + "service": { + "id": 70113, + "integration_id": 1372, + "type": "local_baserow_get_row", + "sample_data": null, + "table_id": 6317, + "view_id": null, + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.program-rowID')" + } + } + }, + { + "id": 54829, + "name": "All programs", + "order": "3.00000000000000000000", + "service": { + "id": 70114, + "integration_id": 1372, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 6317, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "default_result_count": 20 + } + }, + { + "id": 54830, + "name": "List multiple Deliverables", + "order": "4.00000000000000000000", + "service": { + "id": 70115, + "integration_id": 1372, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 6318, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 68926, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.program-rowID')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + } + ], + "workflow_actions": [ + { + "id": 41601, + "type": "open_page", + "order": 1, + "page_id": 19182, + "element_id": 392518, + "event": "submit", + "navigation_type": "page", + "navigate_to_page_id": 19182, + "page_parameters": [], + "query_parameters": [ + { + "name": "program-rowID", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.392520')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self" + }, + { + "id": 41602, + "type": "open_page", + "order": 1, + "page_id": 19182, + "element_id": 392525, + "event": "click", + "navigation_type": "page", + "navigate_to_page_id": 19182, + "page_parameters": [], + "query_parameters": [ + { + "name": "program-rowID", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self" + }, + { + "id": 41603, + "type": "open_page", + "order": 1, + "page_id": 19182, + "element_id": 392524, + "event": "7590dee5-e8d5-4c54-9f13-e96156156278_click", + "navigation_type": "page", + "navigate_to_page_id": 19180, + "page_parameters": [], + "query_parameters": [ + { + "name": "deliverable_rowID", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self" + }, + { + "id": 41604, + "type": "refresh_data_source", + "order": 2, + "page_id": 19182, + "element_id": 392518, + "event": "submit", + "data_source_id": 54828 + } + ], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 19183, + "name": "Donor Reporting Portal", + "order": 6, + "path": "/donor", + "path_params": [], + "query_params": [ + { + "name": "donor_rowID", + "type": "numeric" + } + ], + "shared": false, + "elements": [ + { + "id": 392530, + "order": "0.33333333333333331483", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Donor Reporting Portal'" + }, + "level": 1 + }, + { + "id": 392526, + "order": "0.50000000000000000000", + "type": "simple_container", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 392527, + "order": "1.00000000000000000000", + "type": "simple_container", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 392528, + "order": "1.00000000000000000000", + "type": "form_container", + "parent_element_id": 392526, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "submit_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Search '" + }, + "reset_initial_values_post_submission": false + }, + { + "id": 392529, + "order": "1.00000000000000000000", + "type": "record_selector", + "parent_element_id": 392528, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 54832, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [ + { + "schema_property": "field_68906", + "filterable": false, + "sortable": false, + "searchable": true + } + ], + "required": false, + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Select a donor'" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('','\n','')" + }, + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "multiple": false, + "option_name_suffix": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 392531, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": 392527, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "is_empty(get('page_parameter.donor_rowID')) = false" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Funded by ',get('data_source.54833.field_68906'),' ')" + }, + "level": 1 + }, + { + "id": 392532, + "order": "1.50000000000000000000", + "type": "heading", + "parent_element_id": 392527, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "is_empty(get('page_parameter.donor_rowID')) = true" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'All Funded Programs '" + }, + "level": 1 + }, + { + "id": 392533, + "order": "1.50000000000000000000", + "type": "button", + "parent_element_id": 392526, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "is_empty(get('page_parameter.donor_rowID')) = false" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_text_color": "error", + "button_border_color": "transparent", + "button_hover_text_color": "error", + "button_vertical_padding": 0, + "button_active_text_color": "error", + "button_horizontal_padding": 0, + "button_hover_border_color": "transparent", + "button_active_border_color": "transparent", + "button_hover_background_color": "transparent" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Reset Filters x'" + } + }, + { + "id": 392534, + "order": "2.00000000000000000000", + "type": "table", + "parent_element_id": 392527, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 54831, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [ + { + "schema_property": "field_68931", + "filterable": false, + "sortable": false, + "searchable": false + }, + { + "schema_property": "field_68933", + "filterable": false, + "sortable": false, + "searchable": false + }, + { + "schema_property": "field_68934", + "filterable": false, + "sortable": false, + "searchable": false + } + ], + "fields": [ + { + "uid": "c0656671-a9b3-4a4c-b867-5ec25486068d", + "name": "Name", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68913')" + } + } + }, + { + "uid": "fa232edf-f3f6-4a16-aad3-9f1974ec7822", + "name": "Manager", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68915.*.value')" + } + } + }, + { + "uid": "58777e9e-b5ed-48b3-b316-67a445ba0b7b", + "name": "Donors", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68916.*.value')" + } + } + }, + { + "uid": "c91c9585-eead-47d6-b801-b49a243796d0", + "name": "Status", + "type": "tags", + "styles": {}, + "config": { + "values": { + "mode": "simple", + "version": "0.1", + "formula": "concat('','\n',get('current_record.field_68918.value'))" + }, + "colors_is_formula": true, + "colors": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68918.color')" + } + } + }, + { + "uid": "476be2b3-4149-46ef-9276-8f23fe491a33", + "name": "Start Date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68919')" + } + } + }, + { + "uid": "246cff1f-2754-47ec-8beb-69b0aacd6127", + "name": "End Date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68920')" + } + } + }, + { + "uid": "fd58bd51-8477-416a-bd75-bc867750d20e", + "name": "Total Budget", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('$',get('current_record.field_68921'))" + } + } + }, + { + "uid": "baafbcb5-4c99-4533-bdd9-b304d23eb107", + "name": "", + "type": "button", + "styles": {}, + "config": { + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'\u2709\ufe0f Share Report via Email'" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + } + ], + "data_sources": [ + { + "id": 54831, + "name": "Funded Program Results (Filtered by Donor)", + "order": "1.00000000000000000000", + "service": { + "id": 70116, + "integration_id": 1372, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 6317, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 68916, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.donor_rowID')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 54832, + "name": "All Donors", + "order": "3.00000000000000000000", + "service": { + "id": 70117, + "integration_id": 1372, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 6316, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "default_result_count": 20 + } + }, + { + "id": 54833, + "name": "Donor Info", + "order": "4.00000000000000000000", + "service": { + "id": 70118, + "integration_id": 1372, + "type": "local_baserow_get_row", + "sample_data": null, + "table_id": 6316, + "view_id": null, + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.donor_rowID')" + } + } + } + ], + "workflow_actions": [ + { + "id": 41605, + "type": "refresh_data_source", + "order": 1, + "page_id": 19183, + "element_id": 392528, + "event": "submit", + "data_source_id": 54832 + }, + { + "id": 41606, + "type": "open_page", + "order": 1, + "page_id": 19183, + "element_id": 392533, + "event": "click", + "navigation_type": "page", + "navigate_to_page_id": 19183, + "page_parameters": [], + "query_parameters": [ + { + "name": "donor_rowID", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self" + }, + { + "id": 41607, + "type": "smtp_email", + "order": 1, + "page_id": 19183, + "element_id": 392534, + "event": "baafbcb5-4c99-4533-bdd9-b304d23eb107_click", + "service": { + "id": 70121, + "integration_id": 1373, + "type": "smtp_email", + "sample_data": null, + "from_email": { + "mode": "simple", + "version": "0.1", + "formula": "get('user.email')" + }, + "from_name": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "to_emails": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_68955.0.value')" + }, + "cc_emails": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "bcc_emails": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "subject": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "body_type": "plain", + "body": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_68916.0.value'),'\n',get('current_record.field_68913'))" + } + } + }, + { + "id": 41608, + "type": "open_page", + "order": 2, + "page_id": 19183, + "element_id": 392528, + "event": "submit", + "navigation_type": "page", + "navigate_to_page_id": 19183, + "page_parameters": [], + "query_parameters": [ + { + "name": "donor_rowID", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.392529')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self" + }, + { + "id": 41609, + "type": "refresh_data_source", + "order": 2, + "page_id": 19183, + "element_id": 392533, + "event": "click", + "data_source_id": 54832 + }, + { + "id": 41610, + "type": "notification", + "order": 2, + "page_id": 19183, + "element_id": 392534, + "event": "baafbcb5-4c99-4533-bdd9-b304d23eb107_click", + "title": { + "mode": "simple", + "version": "0.1", + "formula": "'Email Sent'" + }, + "description": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Report sent to ',get('current_record.field_68916.0.value'))" + } + } + ], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [ + "Administrator", + "Executive Viewer" + ] + } + ], + "integrations": [ + { + "id": 1372, + "name": "Local Baserow", + "order": "1.00000000000000000000", + "type": "local_baserow", + "authorized_user": null + }, + { + "id": 1373, + "name": "SMTP Email", + "order": "2.00000000000000000000", + "type": "smtp", + "host": "smtp.gmail.com", + "port": 587, + "use_tls": true, + "username": null, + "password": null + } + ], + "theme": { + "primary_color": "#5161ef", + "secondary_color": "#0eaa42ff", + "border_color": "#d7d8d9ff", + "main_success_color": "#12D452", + "main_warning_color": "#FCC74A", + "main_error_color": "#FF5A4A", + "custom_colors": [], + "body_font_family": "inter", + "body_font_size": 14, + "body_font_weight": "regular", + "body_text_color": "#070810ff", + "body_text_alignment": "left", + "heading_1_font_family": "inter", + "heading_1_font_size": 24, + "heading_1_font_weight": "bold", + "heading_1_text_color": "#070810ff", + "heading_1_text_alignment": "left", + "heading_1_text_decoration": [ + false, + false, + false, + false + ], + "heading_2_font_family": "inter", + "heading_2_font_size": 20, + "heading_2_font_weight": "semi-bold", + "heading_2_text_color": "#070810ff", + "heading_2_text_alignment": "left", + "heading_2_text_decoration": [ + false, + false, + false, + false + ], + "heading_3_font_family": "inter", + "heading_3_font_size": 16, + "heading_3_font_weight": "medium", + "heading_3_text_color": "#070810ff", + "heading_3_text_alignment": "left", + "heading_3_text_decoration": [ + false, + false, + false, + false + ], + "heading_4_font_family": "inter", + "heading_4_font_size": 16, + "heading_4_font_weight": "medium", + "heading_4_text_color": "#070810ff", + "heading_4_text_alignment": "left", + "heading_4_text_decoration": [ + false, + false, + false, + false + ], + "heading_5_font_family": "inter", + "heading_5_font_size": 14, + "heading_5_font_weight": "regular", + "heading_5_text_color": "#070810ff", + "heading_5_text_alignment": "left", + "heading_5_text_decoration": [ + false, + false, + false, + false + ], + "heading_6_font_family": "inter", + "heading_6_font_size": 14, + "heading_6_font_weight": "regular", + "heading_6_text_color": "#202128", + "heading_6_text_alignment": "left", + "heading_6_text_decoration": [ + false, + false, + false, + false + ], + "button_font_family": "inter", + "button_font_size": 13, + "button_font_weight": "regular", + "button_alignment": "left", + "button_text_alignment": "center", + "button_width": "auto", + "button_background_color": "transparent", + "button_text_color": "primary", + "button_border_color": "primary", + "button_border_size": 1, + "button_border_radius": 4, + "button_vertical_padding": 12, + "button_horizontal_padding": 12, + "button_hover_background_color": "#f1f1fe00", + "button_hover_text_color": "primary", + "button_hover_border_color": "primary", + "button_active_background_color": "transparent", + "button_active_text_color": "primary", + "button_active_border_color": "#275d9f", + "image_alignment": "left", + "image_max_width": 100, + "image_max_height": null, + "image_border_radius": 0, + "image_constraint": "contain", + "page_background_color": "#ffffff", + "page_background_file_id": null, + "page_background_mode": "tile", + "label_font_family": "inter", + "label_text_color": "#070810FF", + "label_font_size": 13, + "label_font_weight": "medium", + "input_font_family": "inter", + "input_font_size": 13, + "input_font_weight": "regular", + "input_text_color": "#070810FF", + "input_background_color": "#ffffff", + "input_border_color": "border", + "input_border_size": 1, + "input_border_radius": 4, + "input_vertical_padding": 8, + "input_horizontal_padding": 12, + "table_border_color": "border", + "table_border_size": 1, + "table_border_radius": 4, + "table_header_background_color": "#f1f1fe", + "table_header_text_color": "#000000ff", + "table_header_font_size": 13, + "table_header_font_weight": "semi-bold", + "table_header_font_family": "inter", + "table_header_text_alignment": "left", + "table_cell_background_color": "transparent", + "table_cell_alternate_background_color": "#fbfbff", + "table_cell_alignment": "left", + "table_cell_vertical_padding": 10, + "table_cell_horizontal_padding": 20, + "table_vertical_separator_color": "transparent", + "table_vertical_separator_size": 0, + "table_horizontal_separator_color": "#f3f3f3", + "table_horizontal_separator_size": 1, + "link_font_family": "inter", + "link_font_size": 13, + "link_font_weight": "regular", + "link_text_alignment": "left", + "link_text_color": "primary", + "link_hover_text_color": "#96baf6ff", + "link_active_text_color": "#275d9f", + "link_default_text_decoration": [ + true, + false, + false, + false + ], + "link_hover_text_decoration": [ + true, + false, + false, + false + ], + "link_active_text_decoration": [ + true, + false, + false, + false + ] + }, + "user_sources": [ + { + "id": 861, + "name": "Baserow table authentication", + "order": "1.00000000000000000000", + "type": "local_baserow", + "uid": "861_6315_68898_68899", + "integration_id": 1372, + "auth_providers": [ + { + "id": 866, + "type": "local_baserow_password", + "domain": null, + "enabled": true, + "password_field_id": 68905 + } + ], + "table_id": 6315, + "email_field_id": 68898, + "name_field_id": 68896, + "role_field_id": 68899 + } + ], + "favicon_file": null, + "login_page": { + "id": 19178, + "name": "Login Page", + "order": 1, + "path": "/", + "path_params": [], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 392466, + "order": "0.50000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Login'" + }, + "level": 1 + }, + { + "id": 392467, + "order": "1.00000000000000000000", + "type": "auth_form", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "input": {} + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "small", + "style_width_child": "normal", + "user_source_id": 861, + "login_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + } + ], + "data_sources": [], + "workflow_actions": [ + { + "id": 41587, + "type": "open_page", + "order": 1, + "page_id": 19178, + "element_id": 392467, + "event": "after_login", + "navigation_type": "page", + "navigate_to_page_id": 19179, + "page_parameters": [], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self" + } + ], + "visibility": "all", + "role_type": "allow_all", + "roles": [] + }, + "id": 2378, + "name": "Mission Control", + "order": 2, + "type": "builder", + "scripts": [], + "custom_code": { + "css": "", + "js": "" + } + } + ] +} \ No newline at end of file diff --git a/backend/templates/program-management-kpi.zip b/backend/templates/program-management-kpi.zip new file mode 100644 index 0000000000..c1af45978a Binary files /dev/null and b/backend/templates/program-management-kpi.zip differ diff --git a/backend/templates/work-management-platform.json b/backend/templates/work-management-platform.json new file mode 100644 index 0000000000..026549bc46 --- /dev/null +++ b/backend/templates/work-management-platform.json @@ -0,0 +1,42611 @@ +{ + "baserow_template_version": 1, + "name": "Work Management Platform", + "icon": "iconoir-network", + "keywords": [ + "Project Management", + "Task Management", + "Team Collaboration", + "Workflow Automation", + "Resource Allocation", + "Time Tracking", + "Collaboration Tools" + ], + "categories": [ + "Project Management", + "🔥 Most Popular" + ], + "open_application": 199, + "export": [ + { + "id": 198, + "name": "Project Management", + "order": 1, + "type": "database", + "tables": [ + { + "id": 751, + "name": "Users", + "order": 1, + "fields": [ + { + "id": 7217, + "type": "text", + "name": "Name", + "description": null, + "order": 0, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 7218, + "type": "email", + "name": "Email", + "description": null, + "order": 1, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [] + }, + { + "id": 7219, + "type": "phone_number", + "name": "Phone", + "description": null, + "order": 2, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [] + }, + { + "id": 7220, + "type": "file", + "name": "Picture", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [] + }, + { + "id": 7221, + "type": "link_row", + "name": "Teams - Members", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 752, + "link_row_related_field_id": 7234, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 7222, + "type": "link_row", + "name": "Teams - Lead", + "description": null, + "order": 5, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 752, + "link_row_related_field_id": 7235, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 7223, + "type": "link_row", + "name": "Projects - Owner", + "description": null, + "order": 6, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 753, + "link_row_related_field_id": 7240, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 7224, + "type": "link_row", + "name": "Projects - Member", + "description": null, + "order": 7, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 754, + "link_row_related_field_id": 7247, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 7225, + "type": "link_row", + "name": "Tasks - Created", + "description": null, + "order": 8, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 756, + "link_row_related_field_id": 7258, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 7226, + "type": "link_row", + "name": "Tasks - Assignee", + "description": null, + "order": 9, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 756, + "link_row_related_field_id": 7257, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 7227, + "type": "link_row", + "name": "Task messages", + "description": null, + "order": 10, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 758, + "link_row_related_field_id": 7279, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 7228, + "type": "link_row", + "name": "Tasks - Reviewer", + "description": null, + "order": 11, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 756, + "link_row_related_field_id": 7266, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 7229, + "type": "password", + "name": "Password", + "description": null, + "order": 12, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "allow_endpoint_authentication": true + }, + { + "id": 7230, + "type": "link_row", + "name": "Task actions", + "description": null, + "order": 13, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 757, + "link_row_related_field_id": 7277, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 7318, + "type": "lookup", + "name": "Project", + "description": null, + "order": 14, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": "number", + "number_decimal_places": 0, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "through_field_id": 7224, + "through_field_name": "Projects - Member", + "target_field_id": 7304, + "target_field_name": "Project ID" + }, + { + "id": 7231, + "type": "formula", + "name": "Row ID", + "description": null, + "order": 15, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 0, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "row_id()", + "formula_type": "number" + } + ], + "views": [ + { + "id": 3348, + "type": "grid", + "name": "All users", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 27766, + "field_id": 7217, + "width": 172, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27767, + "field_id": 7218, + "width": 260, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27768, + "field_id": 7229, + "width": 200, + "hidden": true, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27769, + "field_id": 7219, + "width": 141, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27770, + "field_id": 7220, + "width": 108, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27771, + "field_id": 7221, + "width": 164, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27772, + "field_id": 7222, + "width": 200, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27773, + "field_id": 7223, + "width": 200, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27774, + "field_id": 7224, + "width": 200, + "hidden": false, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27775, + "field_id": 7318, + "width": 200, + "hidden": false, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27776, + "field_id": 7225, + "width": 200, + "hidden": false, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27777, + "field_id": 7226, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27778, + "field_id": 7227, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27779, + "field_id": 7228, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27780, + "field_id": 7230, + "width": 200, + "hidden": false, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27781, + "field_id": 7231, + "width": 200, + "hidden": true, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 3349, + "type": "grid", + "name": "Team leaders", + "order": 2, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 1812, + "field_id": 7222, + "type": "not_empty", + "value": "", + "group": null + } + ], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 27782, + "field_id": 7217, + "width": 172, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27783, + "field_id": 7218, + "width": 260, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27784, + "field_id": 7229, + "width": 200, + "hidden": true, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27785, + "field_id": 7219, + "width": 141, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27786, + "field_id": 7220, + "width": 108, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27787, + "field_id": 7221, + "width": 164, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27788, + "field_id": 7222, + "width": 200, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27789, + "field_id": 7223, + "width": 200, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27790, + "field_id": 7224, + "width": 200, + "hidden": false, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27791, + "field_id": 7318, + "width": 200, + "hidden": false, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27792, + "field_id": 7225, + "width": 200, + "hidden": false, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27793, + "field_id": 7226, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27794, + "field_id": 7227, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27795, + "field_id": 7228, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27796, + "field_id": 7230, + "width": 200, + "hidden": false, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27797, + "field_id": 7231, + "width": 200, + "hidden": true, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2026-01-13T13:14:45.548642+00:00", + "updated_on": "2026-01-14T10:16:45.770425+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7217": "Allie Ecker", + "field_7218": "allie.ecker@example.com", + "field_7219": "(949) 873-7292", + "field_7220": [ + { + "name": "rDtKZEEPMYgypE4JIIkWLlkhm4qFdg47_87342f8e2a009873f0cf6cbf8b480d495c898a19238d60b3d6fb81efa41c9883.jpg", + "visible_name": "Woman.12.jpg", + "original_name": "rDtKZEEPMYgypE4JIIkWLlkhm4qFdg47_87342f8e2a009873f0cf6cbf8b480d495c898a19238d60b3d6fb81efa41c9883.jpg", + "size": 46504 + } + ], + "field_7221": [ + 1 + ], + "field_7222": [ + 1 + ], + "field_7223": [], + "field_7224": [ + 4, + 13, + 23 + ], + "field_7225": [ + 19, + 21, + 23, + 25, + 26, + 27, + 29 + ], + "field_7226": [ + 30, + 28, + 26, + 18 + ], + "field_7227": [ + 27 + ], + "field_7228": [ + 19, + 21, + 25 + ], + "field_7229": "pbkdf2_sha256$720000$xl7U9Ap7klkEldlfnDNRX2$4t7G5Y57F6Mkr7LXFEAItBL/5TyTZdM1egKN3qm0MLk=", + "field_7230": [], + "field_7318": null, + "field_7231": null + }, + { + "id": 2, + "order": "2.00000000000000000000", + "created_on": "2026-01-13T13:14:45.548714+00:00", + "updated_on": "2026-01-30T16:08:25.538032+00:00", + "created_by": "frederik@baserow.io", + "field_7217": "Bran Lopez", + "field_7218": "bran.lopez@example.com", + "field_7219": "(650) 869-3623", + "field_7220": [ + { + "name": "7XRl4Cd0ftziIaFnxigwqWxYAnG3UVjO_d022b4d76cc31161673cb1f62b4d1984dc8db57d5d7b62b46ff73de4fde45cfd.jpg", + "visible_name": "Man.20.jpg", + "original_name": "7XRl4Cd0ftziIaFnxigwqWxYAnG3UVjO_d022b4d76cc31161673cb1f62b4d1984dc8db57d5d7b62b46ff73de4fde45cfd.jpg", + "size": 42815 + } + ], + "field_7221": [ + 2 + ], + "field_7222": [ + 2 + ], + "field_7223": [ + 1 + ], + "field_7224": [ + 1, + 5 + ], + "field_7225": [ + 1, + 2, + 3, + 5, + 7, + 15, + 13, + 11, + 10, + 9 + ], + "field_7226": [ + 1, + 2, + 3 + ], + "field_7227": [ + 1, + 4, + 7, + 11, + 13, + 56 + ], + "field_7228": [ + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ], + "field_7229": "pbkdf2_sha256$720000$vU2dFrRUOGHzfct2xRGeBu$XSjFiQD4dyEfGdjYYsTsVbIdSr6GK67v6nW06UzUSl8=", + "field_7230": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12 + ], + "field_7318": null, + "field_7231": null + }, + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2026-01-13T13:16:49.251170+00:00", + "updated_on": "2026-01-14T10:16:48.709438+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7217": "Cinda Pullen", + "field_7218": "cinda.pullen@example.com", + "field_7219": "(213) 743-1636", + "field_7220": [ + { + "name": "vgRnb34kUzQkNVx7pgBqocVFCam7SG3u_32a0bb1e8cd43f9a27f05e95039ad44b606915d94c3f6ac8aa9359a5d66d0e40.jpg", + "visible_name": "Woman.36.jpg", + "original_name": "vgRnb34kUzQkNVx7pgBqocVFCam7SG3u_32a0bb1e8cd43f9a27f05e95039ad44b606915d94c3f6ac8aa9359a5d66d0e40.jpg", + "size": 40189 + } + ], + "field_7221": [ + 3 + ], + "field_7222": [ + 3 + ], + "field_7223": [ + 3 + ], + "field_7224": [ + 9 + ], + "field_7225": [ + 31, + 32, + 38, + 37, + 33, + 34, + 35 + ], + "field_7226": [ + 32, + 38 + ], + "field_7227": [ + 34, + 39, + 42 + ], + "field_7228": [ + 31, + 37, + 36, + 35, + 34, + 33 + ], + "field_7229": "pbkdf2_sha256$720000$6rSavZNkxuQ4BomkCtzlHr$P9iTZXqPZ4RzLvJHJrX2wLRjWDnDZlh5d0qV6sADTgY=", + "field_7230": [], + "field_7318": null, + "field_7231": null + }, + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2026-01-13T13:16:49.251250+00:00", + "updated_on": "2026-01-14T10:16:49.884015+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7217": "Clayton Best", + "field_7218": "clayton.best@example.com", + "field_7219": "(916) 478-0153", + "field_7220": [ + { + "name": "62pgrJsjpKt9gCvZk6fVJECktjoA7waN_636d58571a3d01fad628780775449b7c9fe67e40a5d2154ffeed3cccec5bd2f0.jpg", + "visible_name": "Man.33.jpg", + "original_name": "62pgrJsjpKt9gCvZk6fVJECktjoA7waN_636d58571a3d01fad628780775449b7c9fe67e40a5d2154ffeed3cccec5bd2f0.jpg", + "size": 30280 + } + ], + "field_7221": [ + 3 + ], + "field_7222": [], + "field_7223": [], + "field_7224": [], + "field_7225": [], + "field_7226": [], + "field_7227": [], + "field_7228": [], + "field_7229": "pbkdf2_sha256$720000$TcFuu4JkQ57qyYUvKZwjjK$HT2VStyLGoKoCtijA05NSIK9ytNFQ56NsLxy0tYIrRc=", + "field_7230": [], + "field_7318": null, + "field_7231": null + }, + { + "id": 5, + "order": "5.00000000000000000000", + "created_on": "2026-01-13T13:16:49.251293+00:00", + "updated_on": "2026-01-14T10:16:51.178046+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7217": "Donald Johns", + "field_7218": "donald.johns@example.com", + "field_7219": "(805) 367-1199", + "field_7220": [ + { + "name": "pE69CEqOern0FSyx7MGnD0m4sPLrG8fS_8bf30a876d0d0082aac1b41058c42c8ff2ab323e25afc56b9f5b9bab76cf3ea9.jpg", + "visible_name": "Man.48.jpg", + "original_name": "pE69CEqOern0FSyx7MGnD0m4sPLrG8fS_8bf30a876d0d0082aac1b41058c42c8ff2ab323e25afc56b9f5b9bab76cf3ea9.jpg", + "size": 44078 + } + ], + "field_7221": [ + 1 + ], + "field_7222": [], + "field_7223": [], + "field_7224": [], + "field_7225": [], + "field_7226": [ + 19, + 20, + 21, + 24 + ], + "field_7227": [ + 28, + 31 + ], + "field_7228": [], + "field_7229": "pbkdf2_sha256$720000$fp5ELKPx1ehm7RI6h6h3FN$iPGNIxSQ2G9ilOj2xmZn/OBI0YUx1gRV86duMPcdX38=", + "field_7230": [], + "field_7318": null, + "field_7231": null + }, + { + "id": 6, + "order": "6.00000000000000000000", + "created_on": "2026-01-13T13:16:49.251332+00:00", + "updated_on": "2026-01-14T10:16:52.409376+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7217": "Donald Wright", + "field_7218": "donald.wright@example.com", + "field_7219": "(925) 413-4033", + "field_7220": [ + { + "name": "euzbTXUclMcFoYE5W6DXj10hFzADBMdD_706cb9712f46ff3654d0a1b873f9d20934da457ae1545f1bfdcfcc4f75c4f0fa.jpg", + "visible_name": "Man.09.jpg", + "original_name": "euzbTXUclMcFoYE5W6DXj10hFzADBMdD_706cb9712f46ff3654d0a1b873f9d20934da457ae1545f1bfdcfcc4f75c4f0fa.jpg", + "size": 47186 + } + ], + "field_7221": [ + 3 + ], + "field_7222": [], + "field_7223": [], + "field_7224": [], + "field_7225": [], + "field_7226": [], + "field_7227": [], + "field_7228": [], + "field_7229": "pbkdf2_sha256$720000$IuIHWG0aHUxESmHQxbPTVy$WqgHI3pVlY1vutzAeCMMND+7zlOo9ng7EXoqKX50HfI=", + "field_7230": [], + "field_7318": null, + "field_7231": null + }, + { + "id": 7, + "order": "7.00000000000000000000", + "created_on": "2026-01-13T13:16:49.251371+00:00", + "updated_on": "2026-01-14T10:16:53.962407+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7217": "Elizabeth Cunningham", + "field_7218": "elizabeth.cunningham@example.com", + "field_7219": "(323) 930-9329", + "field_7220": [ + { + "name": "ehLgrmNWLm3Icf5eRWFRlfbYerQNR6tu_6ad39d6d65565870ad02632ebc8f3103ef36c0004f787bc43df882383912bcf1.jpg", + "visible_name": "Woman.27.jpg", + "original_name": "ehLgrmNWLm3Icf5eRWFRlfbYerQNR6tu_6ad39d6d65565870ad02632ebc8f3103ef36c0004f787bc43df882383912bcf1.jpg", + "size": 61085 + } + ], + "field_7221": [ + 1 + ], + "field_7222": [], + "field_7223": [ + 2 + ], + "field_7224": [ + 6 + ], + "field_7225": [ + 16, + 17, + 18, + 20, + 22, + 24, + 28, + 30 + ], + "field_7226": [], + "field_7227": [ + 18, + 20, + 24, + 22, + 30, + 32 + ], + "field_7228": [ + 16, + 17, + 18, + 20, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 30 + ], + "field_7229": "pbkdf2_sha256$720000$qLyeCSQA8mBZvDWAcVQiMc$qccrOv9knjxbzG/VOgcKdA6ZX0gHdH3YSbB6kHmoaaE=", + "field_7230": [], + "field_7318": null, + "field_7231": null + }, + { + "id": 10, + "order": "10.00000000000000000000", + "created_on": "2026-01-13T13:16:49.251485+00:00", + "updated_on": "2026-01-14T10:16:55.299244+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7217": "Janice Fitzpatrick", + "field_7218": "janice.fitzpatrick@example.com", + "field_7219": "(510) 476-1189", + "field_7220": [ + { + "name": "VS8soSNHFTwn64MmIriUxZgJAiE9S0ZL_6033c389c7b9a28b3f4d1ad791cd071bb18d341fb50ca862338d0688129b1d93.jpg", + "visible_name": "Woman.16.jpg", + "original_name": "VS8soSNHFTwn64MmIriUxZgJAiE9S0ZL_6033c389c7b9a28b3f4d1ad791cd071bb18d341fb50ca862338d0688129b1d93.jpg", + "size": 67980 + } + ], + "field_7221": [ + 1 + ], + "field_7222": [], + "field_7223": [], + "field_7224": [], + "field_7225": [], + "field_7226": [], + "field_7227": [], + "field_7228": [], + "field_7229": "pbkdf2_sha256$720000$b6YzeTx9CnZEV77kjtV84x$NrgwlYdHpLPNMaD3DrCUitFINe4OKsx77O609oCu0nM=", + "field_7230": [], + "field_7318": null, + "field_7231": null + }, + { + "id": 11, + "order": "11.00000000000000000000", + "created_on": "2026-01-13T13:16:49.251521+00:00", + "updated_on": "2026-01-14T10:16:56.759160+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7217": "John Marshall", + "field_7218": "john.marshall@example.com", + "field_7219": "(323) 207-7576", + "field_7220": [ + { + "name": "9EIx2PFMsxue3KKF67JYMUxdh373SCLU_5b771a1ce64c7ccb1b909d679a9a9cab06d2563777570d6990b609608a526283.jpg", + "visible_name": "Man.03.jpg", + "original_name": "9EIx2PFMsxue3KKF67JYMUxdh373SCLU_5b771a1ce64c7ccb1b909d679a9a9cab06d2563777570d6990b609608a526283.jpg", + "size": 47886 + } + ], + "field_7221": [ + 3 + ], + "field_7222": [], + "field_7223": [], + "field_7224": [ + 10 + ], + "field_7225": [], + "field_7226": [ + 31, + 37 + ], + "field_7227": [ + 33, + 35 + ], + "field_7228": [], + "field_7229": "pbkdf2_sha256$720000$0Kx7oGe0r6m0GuE4a4t2KI$N2XUw95sFDIRHE+BDLdTiBlyqpDQc0hhPbfLB2Cjq8g=", + "field_7230": [], + "field_7318": null, + "field_7231": null + }, + { + "id": 12, + "order": "12.00000000000000000000", + "created_on": "2026-01-13T13:16:49.251558+00:00", + "updated_on": "2026-01-14T10:16:58.076364+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7217": "Jonathan Castillo", + "field_7218": "jonathan.castillo@example.com", + "field_7219": "(714) 674-5259", + "field_7220": [ + { + "name": "SwetzsJEIv7YAIQSJMtHtWzPmH6bexQa_3e4ea491bc171831d98bd16209e167056256efec656b03792cc985f56c52d625.jpg", + "visible_name": "Man.27.jpg", + "original_name": "SwetzsJEIv7YAIQSJMtHtWzPmH6bexQa_3e4ea491bc171831d98bd16209e167056256efec656b03792cc985f56c52d625.jpg", + "size": 37008 + } + ], + "field_7221": [ + 1 + ], + "field_7222": [], + "field_7223": [], + "field_7224": [ + 8 + ], + "field_7225": [], + "field_7226": [ + 17, + 27, + 23, + 22 + ], + "field_7227": [ + 23 + ], + "field_7228": [], + "field_7229": "pbkdf2_sha256$720000$cLUQjj2XlUCUIQClpzkOKQ$AhYAK4fgSucB8IxcmKoWA8QIlX1+TRwzHRe/tzO4AhQ=", + "field_7230": [], + "field_7318": null, + "field_7231": null + }, + { + "id": 13, + "order": "13.00000000000000000000", + "created_on": "2026-01-13T13:16:49.251596+00:00", + "updated_on": "2026-01-14T10:16:59.061160+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7217": "Judith Triplett", + "field_7218": "judith.triplett@example.com", + "field_7219": "(323) 762-0628", + "field_7220": [ + { + "name": "GAiwdzuARBOi7Xm89PPlzJwZXvpWP7bF_84455edcdf85e5bbcf4ea2c2e53253a70d2dc5003170a2bcb7adb2e06d319885.jpg", + "visible_name": "Woman.38.jpg", + "original_name": "GAiwdzuARBOi7Xm89PPlzJwZXvpWP7bF_84455edcdf85e5bbcf4ea2c2e53253a70d2dc5003170a2bcb7adb2e06d319885.jpg", + "size": 54546 + } + ], + "field_7221": [ + 3 + ], + "field_7222": [], + "field_7223": [], + "field_7224": [ + 12 + ], + "field_7225": [ + 36 + ], + "field_7226": [ + 36, + 35, + 34, + 33 + ], + "field_7227": [ + 38, + 40, + 41, + 43 + ], + "field_7228": [ + 32, + 38 + ], + "field_7229": "pbkdf2_sha256$720000$SlK2kqkhuPOCV4ea2rmPqm$+5WJhefCqrLd1Mtk3ccKcMChhQ/y1Vl52riOf2qIb0U=", + "field_7230": [], + "field_7318": null, + "field_7231": null + }, + { + "id": 14, + "order": "14.00000000000000000000", + "created_on": "2026-01-13T13:16:49.251633+00:00", + "updated_on": "2026-01-14T10:17:00.690934+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7217": "Lane Mahon", + "field_7218": "lane.mahon@example.com", + "field_7219": "(925) 250-4627", + "field_7220": [ + { + "name": "MJRsjsWjUAkyaInrxcVj51O8CSaswn74_7d55a7f32efd179a5dd35d905c33a80528c84e057c8c6ad07a6f190fd8a135b8.jpg", + "visible_name": "Man.18.jpg", + "original_name": "MJRsjsWjUAkyaInrxcVj51O8CSaswn74_7d55a7f32efd179a5dd35d905c33a80528c84e057c8c6ad07a6f190fd8a135b8.jpg", + "size": 51628 + } + ], + "field_7221": [ + 2 + ], + "field_7222": [], + "field_7223": [], + "field_7224": [ + 2 + ], + "field_7225": [ + 4, + 14, + 8 + ], + "field_7226": [ + 4, + 14, + 11, + 10, + 8, + 5 + ], + "field_7227": [ + 3, + 10, + 12, + 6, + 8 + ], + "field_7228": [ + 1, + 2, + 3 + ], + "field_7229": "pbkdf2_sha256$720000$Lsnncp4PD9XSfK16VMBK9l$Lg6mybukqfobvqJWkpeE1zfiN0dFkP1CiGvcdQifPI0=", + "field_7230": [], + "field_7318": null, + "field_7231": null + }, + { + "id": 15, + "order": "15.00000000000000000000", + "created_on": "2026-01-13T13:16:49.251669+00:00", + "updated_on": "2026-01-14T10:17:01.531557+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7217": "Latisha Mazon", + "field_7218": "latisha.mazon@example.com", + "field_7219": "(530) 540-8012", + "field_7220": [ + { + "name": "SawRDCbic5RtCgb03DTWxqYQBgbL8l6c_64038313f395241c5d4d6615d9ba2d4d680777b263a811177230dbb5e391bd6c.jpg", + "visible_name": "Woman.46.jpg", + "original_name": "SawRDCbic5RtCgb03DTWxqYQBgbL8l6c_64038313f395241c5d4d6615d9ba2d4d680777b263a811177230dbb5e391bd6c.jpg", + "size": 41851 + } + ], + "field_7221": [ + 2 + ], + "field_7222": [], + "field_7223": [], + "field_7224": [], + "field_7225": [], + "field_7226": [], + "field_7227": [], + "field_7228": [], + "field_7229": "pbkdf2_sha256$720000$ndEzdyTDzI5DAJ6sg1Wuc2$72FuskUXEvLO+SBYjT/lFTXJcspWbpXtfWrdiizAj3g=", + "field_7230": [], + "field_7318": null, + "field_7231": null + }, + { + "id": 16, + "order": "16.00000000000000000000", + "created_on": "2026-01-13T13:16:49.251705+00:00", + "updated_on": "2026-01-14T10:17:02.809735+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7217": "Lena Hogan", + "field_7218": "lena.hogan@example.com", + "field_7219": "(559) 949-6790", + "field_7220": [ + { + "name": "CGeQlpcsw03v8kL7ua7xTRAojEzMD2WA_623cf9aca2c33d047b0c4312716412c1265e6269631846fff2dfb1147070c8fd.jpg", + "visible_name": "Woman.17.jpg", + "original_name": "CGeQlpcsw03v8kL7ua7xTRAojEzMD2WA_623cf9aca2c33d047b0c4312716412c1265e6269631846fff2dfb1147070c8fd.jpg", + "size": 57070 + } + ], + "field_7221": [ + 2 + ], + "field_7222": [], + "field_7223": [], + "field_7224": [ + 11 + ], + "field_7225": [], + "field_7226": [], + "field_7227": [], + "field_7228": [], + "field_7229": "pbkdf2_sha256$720000$z8vsbJlQajAji1p2Q3JNn5$9E6xn8t/urd21OK1UAz8QL46BFFcdnyP8XenF90Jd0I=", + "field_7230": [], + "field_7318": null, + "field_7231": null + }, + { + "id": 17, + "order": "17.00000000000000000000", + "created_on": "2026-01-13T13:16:49.251741+00:00", + "updated_on": "2026-01-14T10:17:04.081197+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7217": "Leroy Tye", + "field_7218": "leroy.tye@example.com", + "field_7219": "(510) 808-7208", + "field_7220": [ + { + "name": "cgoueHEpkRRIuFCBlYjJe3GGdJdqpSfK_9254445c723333fd7687daff449887a52d0178ff24e24af1c076144a7ba80b32.jpg", + "visible_name": "Man.02.jpg", + "original_name": "cgoueHEpkRRIuFCBlYjJe3GGdJdqpSfK_9254445c723333fd7687daff449887a52d0178ff24e24af1c076144a7ba80b32.jpg", + "size": 51715 + } + ], + "field_7221": [ + 2 + ], + "field_7222": [], + "field_7223": [], + "field_7224": [ + 3 + ], + "field_7225": [ + 6, + 12 + ], + "field_7226": [ + 6, + 7, + 9, + 12, + 13, + 15 + ], + "field_7227": [], + "field_7228": [], + "field_7229": "pbkdf2_sha256$720000$SqTD7lzhrmDUKRNmFmeTHu$Kkwa2qcxlUAa2c3ldD11Qv1deN6alTAZLRndlYhP3FM=", + "field_7230": [], + "field_7318": null, + "field_7231": null + }, + { + "id": 18, + "order": "18.00000000000000000000", + "created_on": "2026-01-13T13:16:49.251778+00:00", + "updated_on": "2026-01-14T10:17:05.176618+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7217": "Michael Robicheaux", + "field_7218": "michael.robicheaux@example.com", + "field_7219": "(707) 840-5210", + "field_7220": [ + { + "name": "rpVHLBfM7R4d9oUxTyWzI8rrSiAOPzMO_0afdb3017ed6ceb4d23b69ab3e44ef5efacb60ad98ddbd49c3138d3059b798c5.jpg", + "visible_name": "Man.28.jpg", + "original_name": "rpVHLBfM7R4d9oUxTyWzI8rrSiAOPzMO_0afdb3017ed6ceb4d23b69ab3e44ef5efacb60ad98ddbd49c3138d3059b798c5.jpg", + "size": 81365 + } + ], + "field_7221": [ + 2 + ], + "field_7222": [], + "field_7223": [], + "field_7224": [], + "field_7225": [], + "field_7226": [], + "field_7227": [], + "field_7228": [], + "field_7229": "pbkdf2_sha256$720000$q0HiUvxJI8DKQPolcaC25n$8t4ptp4ZDl3R6TRpbyBFHLwdBx9fN50o3uPrOM+JER4=", + "field_7230": [], + "field_7318": null, + "field_7231": null + }, + { + "id": 21, + "order": "21.00000000000000000000", + "created_on": "2026-01-13T13:16:49.251888+00:00", + "updated_on": "2026-01-14T10:17:06.855179+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7217": "Richard Rethman", + "field_7218": "richard.rethman@example.com", + "field_7219": "(626) 585-3240", + "field_7220": [ + { + "name": "Pq2Mh7bGe0xyiF8rYhJRqFtk92YuUwQ4_860fc8f7a7c919681aa15783aebf52d282bf73edcba69fd03516ca5aba743f14.jpg", + "visible_name": "Man.31.jpg", + "original_name": "Pq2Mh7bGe0xyiF8rYhJRqFtk92YuUwQ4_860fc8f7a7c919681aa15783aebf52d282bf73edcba69fd03516ca5aba743f14.jpg", + "size": 37358 + } + ], + "field_7221": [ + 2 + ], + "field_7222": [], + "field_7223": [], + "field_7224": [ + 7 + ], + "field_7225": [], + "field_7226": [ + 16, + 29, + 25 + ], + "field_7227": [ + 19 + ], + "field_7228": [], + "field_7229": "pbkdf2_sha256$720000$XPqEEWCOKNuHtG3YgztqBn$yJa3jgWT+Q3550+pWw1k/HJtLw3afOBwcLD955vvpbI=", + "field_7230": [], + "field_7318": null, + "field_7231": null + } + ], + "data_sync": null, + "field_rules": [] + }, + { + "id": 752, + "name": "Teams", + "order": 2, + "fields": [ + { + "id": 7232, + "type": "text", + "name": "Name", + "description": null, + "order": 0, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 7233, + "type": "text", + "name": "Description", + "description": null, + "order": 1, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 7234, + "type": "link_row", + "name": "Team members", + "description": null, + "order": 2, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 751, + "link_row_related_field_id": 7221, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 7235, + "type": "link_row", + "name": "Team lead", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 751, + "link_row_related_field_id": 7222, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + } + ], + "views": [ + { + "id": 3350, + "type": "grid", + "name": "All teams", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 27798, + "field_id": 7232, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27799, + "field_id": 7233, + "width": 303, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27800, + "field_id": 7234, + "width": 294, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27801, + "field_id": 7235, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2026-01-13T13:17:18.026855+00:00", + "updated_on": "2026-01-13T13:20:49.971336+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7232": "IT Services", + "field_7233": "Handles all software and system projects", + "field_7234": [ + 1, + 5, + 7, + 10, + 12 + ], + "field_7235": [ + 1 + ] + }, + { + "id": 2, + "order": "2.00000000000000000000", + "created_on": "2026-01-13T13:17:18.026918+00:00", + "updated_on": "2026-01-13T13:20:53.271161+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7232": "Business Operations", + "field_7233": "Process improvement and operations", + "field_7234": [ + 2, + 14, + 15, + 16, + 17, + 18, + 21 + ], + "field_7235": [ + 2 + ] + }, + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2026-01-13T13:17:42.760780+00:00", + "updated_on": "2026-01-13T13:20:56.681656+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7232": "Marketing", + "field_7233": "Brand and campaign execution", + "field_7234": [ + 3, + 4, + 6, + 11, + 13 + ], + "field_7235": [ + 3 + ] + } + ], + "data_sync": null, + "field_rules": [] + }, + { + "id": 753, + "name": "Projects", + "order": 3, + "fields": [ + { + "id": 7236, + "type": "text", + "name": "Name", + "description": null, + "order": 2, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 7237, + "type": "text", + "name": "Description", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 7238, + "type": "date", + "name": "Start date", + "description": null, + "order": 5, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_format": "ISO", + "date_include_time": false, + "date_time_format": "24", + "date_show_tzinfo": false, + "date_force_timezone": null + }, + { + "id": 7239, + "type": "date", + "name": "End date", + "description": null, + "order": 6, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_format": "ISO", + "date_include_time": false, + "date_time_format": "24", + "date_show_tzinfo": false, + "date_force_timezone": null + }, + { + "id": 7315, + "type": "formula", + "name": "Progress (tasks)", + "description": null, + "order": 9, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 2, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "round(field('Completed workload') / field('Total estimated workload') * 100,2)", + "formula_type": "number" + }, + { + "id": 7240, + "type": "link_row", + "name": "Owner", + "description": null, + "order": 10, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 751, + "link_row_related_field_id": 7223, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 7324, + "type": "formula", + "name": "Status", + "description": null, + "order": 11, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "if(today() < field('Start date'), \"Scheduled\", if(and(today() >field('End date'), field('Progress (tasks)') = 100), \"Completed\", \"Active\"))", + "formula_type": "text" + }, + { + "id": 7241, + "type": "link_row", + "name": "Project members", + "description": null, + "order": 12, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 754, + "link_row_related_field_id": 7246, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 7242, + "type": "link_row", + "name": "Milestones", + "description": null, + "order": 13, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 755, + "link_row_related_field_id": 7250, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 7243, + "type": "link_row", + "name": "Tasks", + "description": null, + "order": 14, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 756, + "link_row_related_field_id": 7263, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 7287, + "type": "lookup", + "name": "Project members (users)", + "description": null, + "order": 15, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": true, + "number_separator": "", + "array_formula_type": "text", + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "through_field_id": 7241, + "through_field_name": "Project members", + "target_field_id": 7247, + "target_field_name": "User" + }, + { + "id": 7244, + "type": "formula", + "name": "Row ID", + "description": null, + "order": 16, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 0, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "row_id()", + "formula_type": "number" + }, + { + "id": 7288, + "type": "rollup", + "name": "Total estimated workload", + "description": null, + "order": 18, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 0, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "through_field_id": 7243, + "target_field_id": 7270, + "rollup_function": "sum" + }, + { + "id": 7290, + "type": "formula", + "name": "Open workload", + "description": null, + "order": 19, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 0, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "sum(filter(lookup('Tasks','Estimated workload'),lookup('Tasks','Status') != 'Done'))", + "formula_type": "number" + }, + { + "id": 7291, + "type": "formula", + "name": "Completed workload", + "description": null, + "order": 20, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 0, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "sum(filter(lookup('Tasks','Estimated workload'),lookup('Tasks','Status') = 'Done'))", + "formula_type": "number" + }, + { + "id": 7298, + "type": "count", + "name": "Total tasks", + "description": null, + "order": 21, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 0, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "through_field_id": 7243 + }, + { + "id": 7292, + "type": "formula", + "name": "Open tasks", + "description": null, + "order": 22, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 0, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "count(filter(lookup('Tasks','Estimated workload'),lookup('Tasks','Status') != 'Done'))", + "formula_type": "number" + }, + { + "id": 7293, + "type": "formula", + "name": "Completed tasks", + "description": null, + "order": 23, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 0, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "count(filter(lookup('Tasks','Estimated workload'),lookup('Tasks','Status') = 'Done'))", + "formula_type": "number" + }, + { + "id": 7331, + "type": "lookup", + "name": "Milestones (with status)", + "description": null, + "order": 24, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": "text", + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "through_field_id": 7242, + "through_field_name": "Milestones", + "target_field_id": 7328, + "target_field_name": "Name with status" + }, + { + "id": 7286, + "type": "formula", + "name": "Progress (time)", + "description": null, + "order": 25, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "%", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 2, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "if(field('Start date') > now(),0,if(field('End date') < now(),100,\nround((date_diff('dd',field('Start date'),now()) / date_diff('dd',field('Start date'),field('End date'))) * 100,0)))", + "formula_type": "number" + }, + { + "id": 7245, + "type": "link_row", + "name": "Files", + "description": null, + "order": 26, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 759, + "link_row_related_field_id": 7285, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 7300, + "type": "lookup", + "name": "Tasks assignees", + "description": null, + "order": 35, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": true, + "number_separator": "", + "array_formula_type": "text", + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "through_field_id": 7243, + "through_field_name": "Tasks", + "target_field_id": 7257, + "target_field_name": "Assignee" + }, + { + "id": 7301, + "type": "lookup", + "name": "Task with assignee", + "description": null, + "order": 36, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": true, + "number_separator": "", + "array_formula_type": "text", + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "through_field_id": 7243, + "through_field_name": "Tasks", + "target_field_id": 7257, + "target_field_name": "Assignee" + }, + { + "id": 7325, + "type": "formula", + "name": "Behind time progress", + "description": null, + "order": 37, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "field('Progress (time)') > field('Progress (tasks)')", + "formula_type": "boolean" + } + ], + "views": [ + { + "id": 3351, + "type": "grid", + "name": "All projects", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 27802, + "field_id": 7236, + "width": 200, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27803, + "field_id": 7237, + "width": 309, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27804, + "field_id": 7240, + "width": 200, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27805, + "field_id": 7238, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27806, + "field_id": 7239, + "width": 200, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27807, + "field_id": 7324, + "width": 200, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27808, + "field_id": 7315, + "width": 200, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27809, + "field_id": 7286, + "width": 152, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27810, + "field_id": 7241, + "width": 200, + "hidden": false, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27811, + "field_id": 7287, + "width": 200, + "hidden": false, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27812, + "field_id": 7242, + "width": 200, + "hidden": false, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27813, + "field_id": 7331, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27814, + "field_id": 7243, + "width": 200, + "hidden": false, + "order": 12, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27815, + "field_id": 7300, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27816, + "field_id": 7301, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27817, + "field_id": 7244, + "width": 200, + "hidden": true, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27818, + "field_id": 7288, + "width": 240, + "hidden": false, + "order": 16, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27819, + "field_id": 7298, + "width": 200, + "hidden": false, + "order": 17, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27820, + "field_id": 7290, + "width": 200, + "hidden": false, + "order": 18, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27821, + "field_id": 7292, + "width": 200, + "hidden": false, + "order": 19, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27822, + "field_id": 7291, + "width": 200, + "hidden": false, + "order": 20, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27823, + "field_id": 7293, + "width": 200, + "hidden": false, + "order": 21, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27824, + "field_id": 7245, + "width": 200, + "hidden": true, + "order": 22, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27825, + "field_id": 7325, + "width": 200, + "hidden": true, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 3352, + "type": "grid", + "name": "Active projects", + "order": 2, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 1813, + "field_id": 7324, + "type": "equal", + "value": "Active", + "group": null + } + ], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 27826, + "field_id": 7236, + "width": 200, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27827, + "field_id": 7237, + "width": 309, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27828, + "field_id": 7240, + "width": 200, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27829, + "field_id": 7238, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27830, + "field_id": 7239, + "width": 200, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27831, + "field_id": 7324, + "width": 200, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27832, + "field_id": 7315, + "width": 200, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27833, + "field_id": 7286, + "width": 152, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27834, + "field_id": 7241, + "width": 200, + "hidden": false, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27835, + "field_id": 7287, + "width": 200, + "hidden": true, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27836, + "field_id": 7242, + "width": 200, + "hidden": false, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27837, + "field_id": 7331, + "width": 200, + "hidden": true, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27838, + "field_id": 7243, + "width": 200, + "hidden": false, + "order": 12, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27839, + "field_id": 7300, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27840, + "field_id": 7301, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27841, + "field_id": 7244, + "width": 200, + "hidden": true, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27842, + "field_id": 7288, + "width": 240, + "hidden": false, + "order": 16, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27843, + "field_id": 7298, + "width": 200, + "hidden": false, + "order": 17, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27844, + "field_id": 7290, + "width": 200, + "hidden": false, + "order": 18, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27845, + "field_id": 7292, + "width": 200, + "hidden": false, + "order": 19, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27846, + "field_id": 7291, + "width": 200, + "hidden": false, + "order": 20, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27847, + "field_id": 7293, + "width": 200, + "hidden": false, + "order": 21, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27848, + "field_id": 7245, + "width": 200, + "hidden": true, + "order": 22, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 3353, + "type": "grid", + "name": "Projects behind schedule (time % > tasks %)", + "order": 3, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 1814, + "field_id": 7325, + "type": "boolean", + "value": "1", + "group": null + } + ], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 27849, + "field_id": 7236, + "width": 200, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27850, + "field_id": 7237, + "width": 309, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27851, + "field_id": 7240, + "width": 200, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27852, + "field_id": 7238, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27853, + "field_id": 7239, + "width": 200, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27854, + "field_id": 7324, + "width": 200, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27855, + "field_id": 7315, + "width": 200, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27856, + "field_id": 7286, + "width": 152, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27857, + "field_id": 7241, + "width": 200, + "hidden": false, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27858, + "field_id": 7287, + "width": 200, + "hidden": true, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27859, + "field_id": 7242, + "width": 200, + "hidden": false, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27860, + "field_id": 7331, + "width": 200, + "hidden": true, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27861, + "field_id": 7243, + "width": 200, + "hidden": false, + "order": 12, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27862, + "field_id": 7300, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27863, + "field_id": 7301, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27864, + "field_id": 7244, + "width": 200, + "hidden": true, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27865, + "field_id": 7288, + "width": 240, + "hidden": false, + "order": 16, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27866, + "field_id": 7298, + "width": 200, + "hidden": false, + "order": 17, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27867, + "field_id": 7290, + "width": 200, + "hidden": false, + "order": 18, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27868, + "field_id": 7292, + "width": 200, + "hidden": false, + "order": 19, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27869, + "field_id": 7291, + "width": 200, + "hidden": false, + "order": 20, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27870, + "field_id": 7293, + "width": 200, + "hidden": false, + "order": 21, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27871, + "field_id": 7245, + "width": 200, + "hidden": true, + "order": 22, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27872, + "field_id": 7325, + "width": 200, + "hidden": true, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2026-01-13T13:23:10.784255+00:00", + "updated_on": "2026-02-19T09:58:43.267498+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7236": "CRM System Upgrade", + "field_7237": "Upgrade CRM to support automation", + "field_7238": "2025-02-01", + "field_7239": "2026-08-31", + "field_7315": null, + "field_7240": [ + 2 + ], + "field_7324": null, + "field_7241": [ + 1, + 2, + 3, + 23 + ], + "field_7242": [ + 1, + 2, + 3, + 4, + 5 + ], + "field_7243": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ], + "field_7287": null, + "field_7244": null, + "field_7288": null, + "field_7290": null, + "field_7291": null, + "field_7298": null, + "field_7292": null, + "field_7293": null, + "field_7331": null, + "field_7286": null, + "field_7245": [ + 1, + 2 + ], + "field_7300": null, + "field_7301": null, + "field_7325": null + }, + { + "id": 2, + "order": "2.00000000000000000000", + "created_on": "2026-01-13T13:23:10.784295+00:00", + "updated_on": "2026-02-03T11:22:25.940440+00:00", + "created_by": "frederik@baserow.io", + "field_7236": "ISO 27001 Compliance", + "field_7237": "Implement information security controls", + "field_7238": "2026-01-05", + "field_7239": "2026-06-30", + "field_7315": null, + "field_7240": [ + 7 + ], + "field_7324": null, + "field_7241": [ + 4, + 5, + 6, + 7, + 8 + ], + "field_7242": [ + 6, + 7, + 8, + 9, + 10 + ], + "field_7243": [ + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30 + ], + "field_7287": null, + "field_7244": null, + "field_7288": null, + "field_7290": null, + "field_7291": null, + "field_7298": null, + "field_7292": null, + "field_7293": null, + "field_7331": null, + "field_7286": null, + "field_7245": [], + "field_7300": null, + "field_7301": null, + "field_7325": null + }, + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2026-01-13T13:23:10.784307+00:00", + "updated_on": "2026-02-03T11:22:35.956759+00:00", + "created_by": "frederik@baserow.io", + "field_7236": "Spring Marketing Campaign", + "field_7237": "Launch new spring promotion", + "field_7238": "2026-01-01", + "field_7239": "2026-04-30", + "field_7315": null, + "field_7240": [ + 3 + ], + "field_7324": null, + "field_7241": [ + 9, + 10, + 11, + 12, + 13 + ], + "field_7242": [ + 11, + 12, + 13, + 14 + ], + "field_7243": [ + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38 + ], + "field_7287": null, + "field_7244": null, + "field_7288": null, + "field_7290": null, + "field_7291": null, + "field_7298": null, + "field_7292": null, + "field_7293": null, + "field_7331": null, + "field_7286": null, + "field_7245": [], + "field_7300": null, + "field_7301": null, + "field_7325": null + } + ], + "data_sync": null, + "field_rules": [] + }, + { + "id": 754, + "name": "Project members", + "order": 4, + "fields": [ + { + "id": 7302, + "type": "formula", + "name": "Name", + "description": null, + "order": 0, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "join(concat(field('Project'),'-',field('User')),'')", + "formula_type": "text" + }, + { + "id": 7246, + "type": "link_row", + "name": "Project", + "description": null, + "order": 1, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 753, + "link_row_related_field_id": 7241, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 7247, + "type": "link_row", + "name": "User", + "description": null, + "order": 2, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 751, + "link_row_related_field_id": 7224, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 7303, + "type": "lookup", + "name": "Team", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": true, + "number_separator": "", + "array_formula_type": "text", + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "through_field_id": 7247, + "through_field_name": "User", + "target_field_id": 7221, + "target_field_name": "Teams - Members" + }, + { + "id": 7304, + "type": "rollup", + "name": "Project ID", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 0, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "through_field_id": 7246, + "target_field_id": 7244, + "rollup_function": "min" + }, + { + "id": 7305, + "type": "lookup", + "name": "User picture", + "description": null, + "order": 5, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": true, + "number_separator": "", + "array_formula_type": "single_file", + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "through_field_id": 7247, + "through_field_name": "User", + "target_field_id": 7220, + "target_field_name": "Picture" + }, + { + "id": 7307, + "type": "lookup", + "name": "Project owner", + "description": null, + "order": 7, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": true, + "number_separator": "", + "array_formula_type": "text", + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "through_field_id": 7246, + "through_field_name": "Project", + "target_field_id": 7240, + "target_field_name": "Owner" + }, + { + "id": 7319, + "type": "formula", + "name": "Is Project owner", + "description": null, + "order": 8, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "every(field('Project owner') = field('User'))", + "formula_type": "boolean" + } + ], + "views": [ + { + "id": 3354, + "type": "grid", + "name": "All project members", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 27873, + "field_id": 7246, + "width": 219, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27874, + "field_id": 7307, + "width": 200, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27875, + "field_id": 7304, + "width": 200, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27876, + "field_id": 7247, + "width": 174, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27877, + "field_id": 7319, + "width": 200, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27878, + "field_id": 7305, + "width": 137, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27879, + "field_id": 7302, + "width": 330, + "hidden": false, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27880, + "field_id": 7303, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2026-01-13T13:37:07.568758+00:00", + "updated_on": "2026-01-13T13:41:54.044574+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7302": null, + "field_7246": [ + 1 + ], + "field_7247": [ + 2 + ], + "field_7303": null, + "field_7304": null, + "field_7305": null, + "field_7307": null, + "field_7319": null + }, + { + "id": 2, + "order": "2.00000000000000000000", + "created_on": "2026-01-13T13:37:07.568853+00:00", + "updated_on": "2026-01-13T13:42:06.554344+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7302": null, + "field_7246": [ + 1 + ], + "field_7247": [ + 14 + ], + "field_7303": null, + "field_7304": null, + "field_7305": null, + "field_7307": null, + "field_7319": null + }, + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2026-01-13T13:41:19.498446+00:00", + "updated_on": "2026-02-19T10:05:28.722257+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7302": null, + "field_7246": [ + 1 + ], + "field_7247": [ + 17 + ], + "field_7303": null, + "field_7304": null, + "field_7305": null, + "field_7307": null, + "field_7319": null + }, + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2026-01-13T13:41:23.647254+00:00", + "updated_on": "2026-02-19T10:05:35.605288+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7302": null, + "field_7246": [ + 2 + ], + "field_7247": [ + 1 + ], + "field_7303": null, + "field_7304": null, + "field_7305": null, + "field_7307": null, + "field_7319": null + }, + { + "id": 5, + "order": "5.00000000000000000000", + "created_on": "2026-01-13T13:41:28.793442+00:00", + "updated_on": "2026-02-19T10:05:39.969773+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7302": null, + "field_7246": [ + 2 + ], + "field_7247": [ + 2 + ], + "field_7303": null, + "field_7304": null, + "field_7305": null, + "field_7307": null, + "field_7319": null + }, + { + "id": 6, + "order": "6.00000000000000000000", + "created_on": "2026-01-13T13:41:31.834911+00:00", + "updated_on": "2026-01-13T13:42:32.657390+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7302": null, + "field_7246": [ + 2 + ], + "field_7247": [ + 7 + ], + "field_7303": null, + "field_7304": null, + "field_7305": null, + "field_7307": null, + "field_7319": null + }, + { + "id": 7, + "order": "7.00000000000000000000", + "created_on": "2026-01-13T13:41:33.595658+00:00", + "updated_on": "2026-01-13T13:42:37.789387+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7302": null, + "field_7246": [ + 2 + ], + "field_7247": [ + 21 + ], + "field_7303": null, + "field_7304": null, + "field_7305": null, + "field_7307": null, + "field_7319": null + }, + { + "id": 8, + "order": "8.00000000000000000000", + "created_on": "2026-01-13T13:41:36.330381+00:00", + "updated_on": "2026-01-13T13:42:49.748414+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7302": null, + "field_7246": [ + 2 + ], + "field_7247": [ + 12 + ], + "field_7303": null, + "field_7304": null, + "field_7305": null, + "field_7307": null, + "field_7319": null + }, + { + "id": 9, + "order": "9.00000000000000000000", + "created_on": "2026-01-13T13:41:37.654057+00:00", + "updated_on": "2026-01-13T13:42:56.480545+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7302": null, + "field_7246": [ + 3 + ], + "field_7247": [ + 3 + ], + "field_7303": null, + "field_7304": null, + "field_7305": null, + "field_7307": null, + "field_7319": null + }, + { + "id": 10, + "order": "10.00000000000000000000", + "created_on": "2026-01-13T13:41:41.837032+00:00", + "updated_on": "2026-01-13T13:43:01.813074+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7302": null, + "field_7246": [ + 3 + ], + "field_7247": [ + 11 + ], + "field_7303": null, + "field_7304": null, + "field_7305": null, + "field_7307": null, + "field_7319": null + }, + { + "id": 11, + "order": "11.00000000000000000000", + "created_on": "2026-01-13T13:41:42.561043+00:00", + "updated_on": "2026-01-13T13:43:07.425990+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7302": null, + "field_7246": [ + 3 + ], + "field_7247": [ + 16 + ], + "field_7303": null, + "field_7304": null, + "field_7305": null, + "field_7307": null, + "field_7319": null + }, + { + "id": 12, + "order": "12.00000000000000000000", + "created_on": "2026-01-13T13:41:45.644654+00:00", + "updated_on": "2026-01-13T13:43:18.085662+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7302": null, + "field_7246": [ + 3 + ], + "field_7247": [ + 13 + ], + "field_7303": null, + "field_7304": null, + "field_7305": null, + "field_7307": null, + "field_7319": null + }, + { + "id": 13, + "order": "13.00000000000000000000", + "created_on": "2026-01-21T14:37:32.373959+00:00", + "updated_on": "2026-01-21T14:37:32.373959+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7302": null, + "field_7246": [ + 3 + ], + "field_7247": [ + 1 + ], + "field_7303": null, + "field_7304": null, + "field_7305": null, + "field_7307": null, + "field_7319": null + }, + { + "id": 23, + "order": "15.00000000000000000000", + "created_on": "2026-01-22T15:10:06.522411+00:00", + "updated_on": "2026-01-22T15:10:06.522411+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7302": null, + "field_7246": [ + 1 + ], + "field_7247": [ + 1 + ], + "field_7303": null, + "field_7304": null, + "field_7305": null, + "field_7307": null, + "field_7319": null + } + ], + "data_sync": null, + "field_rules": [] + }, + { + "id": 755, + "name": "Milestones", + "order": 6, + "fields": [ + { + "id": 7248, + "type": "text", + "name": "Name", + "description": null, + "order": 2, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 7326, + "type": "formula", + "name": "Status", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "if(field('All tasks completed'),'Completed',if(field('No tasks started'),'Not started yet','In progress'))", + "formula_type": "text" + }, + { + "id": 7249, + "type": "text", + "name": "Description", + "description": null, + "order": 5, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 7250, + "type": "link_row", + "name": "Project", + "description": null, + "order": 6, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 753, + "link_row_related_field_id": 7242, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 7251, + "type": "link_row", + "name": "Tasks", + "description": null, + "order": 7, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 756, + "link_row_related_field_id": 7262, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 7252, + "type": "formula", + "name": "Row ID", + "description": null, + "order": 8, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 0, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "row_id()", + "formula_type": "number" + }, + { + "id": 7316, + "type": "formula", + "name": "All tasks completed", + "description": null, + "order": 9, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "field('Open workload') = 0", + "formula_type": "boolean" + }, + { + "id": 7308, + "type": "formula", + "name": "No tasks started", + "description": null, + "order": 10, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "count(filter(field('Tasks'),lookup('Tasks','Status') = 'To do')) = count(field('Tasks'))", + "formula_type": "boolean" + }, + { + "id": 7328, + "type": "formula", + "name": "Name with status", + "description": null, + "order": 11, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "concat(field('Name'),' (',field('Status'),')')", + "formula_type": "text" + }, + { + "id": 7309, + "type": "rollup", + "name": "Start date", + "description": null, + "order": 12, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": false, + "date_time_format": "24", + "date_force_timezone": null, + "nullable": true, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": false, + "date_format": "ISO", + "duration_format": null, + "number_prefix": "", + "through_field_id": 7251, + "target_field_id": 7259, + "rollup_function": "min" + }, + { + "id": 7310, + "type": "rollup", + "name": "End date", + "description": null, + "order": 13, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": false, + "date_time_format": "24", + "date_force_timezone": null, + "nullable": true, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": false, + "date_format": "ISO", + "duration_format": null, + "number_prefix": "", + "through_field_id": 7251, + "target_field_id": 7260, + "rollup_function": "max" + }, + { + "id": 7289, + "type": "rollup", + "name": "Total estimated workload", + "description": null, + "order": 14, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 0, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "through_field_id": 7251, + "target_field_id": 7270, + "rollup_function": "sum" + }, + { + "id": 7299, + "type": "count", + "name": "Total tasks", + "description": null, + "order": 15, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 0, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "through_field_id": 7251 + }, + { + "id": 7294, + "type": "formula", + "name": "Open workload", + "description": null, + "order": 16, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 0, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "sum(filter(lookup('Tasks','Estimated workload'),lookup('Tasks','Status') != 'Done'))", + "formula_type": "number" + }, + { + "id": 7295, + "type": "formula", + "name": "Open tasks", + "description": null, + "order": 17, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 0, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "count(filter(lookup('Tasks','Estimated workload'),lookup('Tasks','Status') != 'Done'))", + "formula_type": "number" + }, + { + "id": 7296, + "type": "formula", + "name": "Completed workload", + "description": null, + "order": 18, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 0, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "sum(filter(lookup('Tasks','Estimated workload'),lookup('Tasks','Status') = 'Done'))", + "formula_type": "number" + }, + { + "id": 7297, + "type": "formula", + "name": "Completed tasks", + "description": null, + "order": 19, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 0, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "count(filter(lookup('Tasks','Estimated workload'),lookup('Tasks','Status') = 'Done'))", + "formula_type": "number" + }, + { + "id": 7317, + "type": "formula", + "name": "Progress (tasks)", + "description": null, + "order": 20, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 2, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "round(field('Completed workload') / field('Total estimated workload') * 100,2)", + "formula_type": "number" + }, + { + "id": 7320, + "type": "formula", + "name": "Progress (time)", + "description": null, + "order": 21, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 0, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "if(field('Start date') > now(),0,if(field('End date') < now(),100,\nround((date_diff('dd',field('Start date'),now()) / date_diff('dd',field('Start date'),field('End date'))) * 100,0)))", + "formula_type": "number" + }, + { + "id": 7329, + "type": "formula", + "name": "Status (icon)", + "description": null, + "order": 22, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "if(field('Status') = 'Completed','\ud83d\udfe2',if(field('Status') = 'In progress','\ud83d\udfe1','\ud83d\udd35'))", + "formula_type": "text" + }, + { + "id": 7332, + "type": "formula", + "name": "Name with icon", + "description": null, + "order": 23, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "concat(field('Status (icon)'),' ',field('Name'))", + "formula_type": "text" + } + ], + "views": [ + { + "id": 3355, + "type": "grid", + "name": "All milestones", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 27881, + "field_id": 7249, + "width": 200, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27882, + "field_id": 7250, + "width": 200, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27883, + "field_id": 7248, + "width": 200, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27884, + "field_id": 7309, + "width": 130, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27885, + "field_id": 7310, + "width": 126, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27886, + "field_id": 7317, + "width": 169, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27887, + "field_id": 7320, + "width": 150, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27888, + "field_id": 7326, + "width": 148, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27889, + "field_id": 7329, + "width": 186, + "hidden": true, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27890, + "field_id": 7251, + "width": 200, + "hidden": false, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27891, + "field_id": 7289, + "width": 200, + "hidden": false, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27892, + "field_id": 7299, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27893, + "field_id": 7294, + "width": 200, + "hidden": false, + "order": 12, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27894, + "field_id": 7295, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27895, + "field_id": 7296, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27896, + "field_id": 7297, + "width": 200, + "hidden": false, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27897, + "field_id": 7252, + "width": 200, + "hidden": true, + "order": 16, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27898, + "field_id": 7316, + "width": 200, + "hidden": false, + "order": 17, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27899, + "field_id": 7308, + "width": 200, + "hidden": false, + "order": 18, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27900, + "field_id": 7328, + "width": 200, + "hidden": true, + "order": 19, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27901, + "field_id": 7332, + "width": 200, + "hidden": true, + "order": 20, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 3356, + "type": "grid", + "name": "Milestones in progress", + "order": 2, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 1815, + "field_id": 7326, + "type": "equal", + "value": "In progress", + "group": null + } + ], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 27902, + "field_id": 7249, + "width": 200, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27903, + "field_id": 7250, + "width": 200, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27904, + "field_id": 7248, + "width": 200, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27905, + "field_id": 7309, + "width": 130, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27906, + "field_id": 7310, + "width": 126, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27907, + "field_id": 7317, + "width": 169, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27908, + "field_id": 7320, + "width": 150, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27909, + "field_id": 7326, + "width": 148, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27910, + "field_id": 7329, + "width": 186, + "hidden": true, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27911, + "field_id": 7251, + "width": 200, + "hidden": false, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27912, + "field_id": 7289, + "width": 200, + "hidden": false, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27913, + "field_id": 7299, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27914, + "field_id": 7294, + "width": 200, + "hidden": false, + "order": 12, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27915, + "field_id": 7295, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27916, + "field_id": 7296, + "width": 200, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27917, + "field_id": 7297, + "width": 200, + "hidden": false, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27918, + "field_id": 7252, + "width": 200, + "hidden": true, + "order": 16, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27919, + "field_id": 7316, + "width": 200, + "hidden": false, + "order": 17, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27920, + "field_id": 7308, + "width": 200, + "hidden": false, + "order": 18, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27921, + "field_id": 7328, + "width": 200, + "hidden": true, + "order": 19, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27922, + "field_id": 7332, + "width": 200, + "hidden": true, + "order": 20, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2026-01-14T07:19:45.062709+00:00", + "updated_on": "2026-02-03T11:24:39.221846+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7248": "CRM Architecture Approved", + "field_7326": null, + "field_7249": "System design and data model approved", + "field_7250": [ + 1 + ], + "field_7251": [ + 1, + 2, + 3 + ], + "field_7252": null, + "field_7316": null, + "field_7308": null, + "field_7328": null, + "field_7309": null, + "field_7310": null, + "field_7289": null, + "field_7299": null, + "field_7294": null, + "field_7295": null, + "field_7296": null, + "field_7297": null, + "field_7317": null, + "field_7320": null, + "field_7329": null, + "field_7332": null + }, + { + "id": 2, + "order": "2.00000000000000000000", + "created_on": "2026-01-14T07:19:45.062743+00:00", + "updated_on": "2026-01-14T07:21:10.714479+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7248": "Core CRM Implemented", + "field_7326": null, + "field_7249": "Basic CRM features running", + "field_7250": [ + 1 + ], + "field_7251": [ + 4, + 5, + 6 + ], + "field_7252": null, + "field_7316": null, + "field_7308": null, + "field_7328": null, + "field_7309": null, + "field_7310": null, + "field_7289": null, + "field_7299": null, + "field_7294": null, + "field_7295": null, + "field_7296": null, + "field_7297": null, + "field_7317": null, + "field_7320": null, + "field_7329": null, + "field_7332": null + }, + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2026-01-14T07:19:45.062752+00:00", + "updated_on": "2026-01-14T07:21:11.162348+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7248": "Automation Engine Live", + "field_7326": null, + "field_7249": "Workflow automation deployed", + "field_7250": [ + 1 + ], + "field_7251": [ + 7, + 8, + 9 + ], + "field_7252": null, + "field_7316": null, + "field_7308": null, + "field_7328": null, + "field_7309": null, + "field_7310": null, + "field_7289": null, + "field_7299": null, + "field_7294": null, + "field_7295": null, + "field_7296": null, + "field_7297": null, + "field_7317": null, + "field_7320": null, + "field_7329": null, + "field_7332": null + }, + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2026-01-14T07:19:45.062769+00:00", + "updated_on": "2026-01-14T07:21:11.459034+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7248": "User Acceptance Testing", + "field_7326": null, + "field_7249": "Business users validate CRM", + "field_7250": [ + 1 + ], + "field_7251": [ + 10, + 11, + 12 + ], + "field_7252": null, + "field_7316": null, + "field_7308": null, + "field_7328": null, + "field_7309": null, + "field_7310": null, + "field_7289": null, + "field_7299": null, + "field_7294": null, + "field_7295": null, + "field_7296": null, + "field_7297": null, + "field_7317": null, + "field_7320": null, + "field_7329": null, + "field_7332": null + }, + { + "id": 5, + "order": "5.00000000000000000000", + "created_on": "2026-01-14T07:19:45.062777+00:00", + "updated_on": "2026-01-20T12:18:51.118317+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7248": "Go-Live test", + "field_7326": null, + "field_7249": "CRM released to all users", + "field_7250": [ + 1 + ], + "field_7251": [ + 13, + 14, + 15 + ], + "field_7252": null, + "field_7316": null, + "field_7308": null, + "field_7328": null, + "field_7309": null, + "field_7310": null, + "field_7289": null, + "field_7299": null, + "field_7294": null, + "field_7295": null, + "field_7296": null, + "field_7297": null, + "field_7317": null, + "field_7320": null, + "field_7329": null, + "field_7332": null + }, + { + "id": 6, + "order": "6.00000000000000000000", + "created_on": "2026-01-14T07:19:45.062786+00:00", + "updated_on": "2026-01-14T07:21:03.163091+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7248": "Security Risk Assessment", + "field_7326": null, + "field_7249": "All ISO 27001 risks identified", + "field_7250": [ + 2 + ], + "field_7251": [ + 16, + 17, + 18 + ], + "field_7252": null, + "field_7316": null, + "field_7308": null, + "field_7328": null, + "field_7309": null, + "field_7310": null, + "field_7289": null, + "field_7299": null, + "field_7294": null, + "field_7295": null, + "field_7296": null, + "field_7297": null, + "field_7317": null, + "field_7320": null, + "field_7329": null, + "field_7332": null + }, + { + "id": 7, + "order": "7.00000000000000000000", + "created_on": "2026-01-14T07:19:45.062794+00:00", + "updated_on": "2026-01-14T07:21:13.249190+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7248": "Control Framework Defined", + "field_7326": null, + "field_7249": "Security controls documented", + "field_7250": [ + 2 + ], + "field_7251": [ + 19, + 20, + 21 + ], + "field_7252": null, + "field_7316": null, + "field_7308": null, + "field_7328": null, + "field_7309": null, + "field_7310": null, + "field_7289": null, + "field_7299": null, + "field_7294": null, + "field_7295": null, + "field_7296": null, + "field_7297": null, + "field_7317": null, + "field_7320": null, + "field_7329": null, + "field_7332": null + }, + { + "id": 8, + "order": "8.00000000000000000000", + "created_on": "2026-01-14T07:19:45.062802+00:00", + "updated_on": "2026-01-14T07:21:13.591532+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7248": "Technical Controls Implemented", + "field_7326": null, + "field_7249": "Security tools and configurations deployed", + "field_7250": [ + 2 + ], + "field_7251": [ + 22, + 23, + 24 + ], + "field_7252": null, + "field_7316": null, + "field_7308": null, + "field_7328": null, + "field_7309": null, + "field_7310": null, + "field_7289": null, + "field_7299": null, + "field_7294": null, + "field_7295": null, + "field_7296": null, + "field_7297": null, + "field_7317": null, + "field_7320": null, + "field_7329": null, + "field_7332": null + }, + { + "id": 9, + "order": "9.00000000000000000000", + "created_on": "2026-01-14T07:19:45.062810+00:00", + "updated_on": "2026-01-14T07:21:13.989238+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7248": "Internal Audit", + "field_7326": null, + "field_7249": "ISO readiness audit performed", + "field_7250": [ + 2 + ], + "field_7251": [ + 25, + 26, + 27 + ], + "field_7252": null, + "field_7316": null, + "field_7308": null, + "field_7328": null, + "field_7309": null, + "field_7310": null, + "field_7289": null, + "field_7299": null, + "field_7294": null, + "field_7295": null, + "field_7296": null, + "field_7297": null, + "field_7317": null, + "field_7320": null, + "field_7329": null, + "field_7332": null + }, + { + "id": 10, + "order": "10.00000000000000000000", + "created_on": "2026-01-14T07:19:45.062818+00:00", + "updated_on": "2026-01-14T07:21:14.305312+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7248": "Certification Audit", + "field_7326": null, + "field_7249": "External ISO 27001 certification", + "field_7250": [ + 2 + ], + "field_7251": [ + 28, + 29, + 30 + ], + "field_7252": null, + "field_7316": null, + "field_7308": null, + "field_7328": null, + "field_7309": null, + "field_7310": null, + "field_7289": null, + "field_7299": null, + "field_7294": null, + "field_7295": null, + "field_7296": null, + "field_7297": null, + "field_7317": null, + "field_7320": null, + "field_7329": null, + "field_7332": null + }, + { + "id": 11, + "order": "11.00000000000000000000", + "created_on": "2026-01-14T07:19:45.062826+00:00", + "updated_on": "2026-01-14T07:21:07.391903+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7248": "Campaign Strategy Approved", + "field_7326": null, + "field_7249": "Marketing plan and target audience defined", + "field_7250": [ + 3 + ], + "field_7251": [ + 31, + 32 + ], + "field_7252": null, + "field_7316": null, + "field_7308": null, + "field_7328": null, + "field_7309": null, + "field_7310": null, + "field_7289": null, + "field_7299": null, + "field_7294": null, + "field_7295": null, + "field_7296": null, + "field_7297": null, + "field_7317": null, + "field_7320": null, + "field_7329": null, + "field_7332": null + }, + { + "id": 12, + "order": "12.00000000000000000000", + "created_on": "2026-01-14T07:19:45.062834+00:00", + "updated_on": "2026-01-14T07:21:15.600162+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7248": "Creative Assets Ready", + "field_7326": null, + "field_7249": "All visuals and copy produced", + "field_7250": [ + 3 + ], + "field_7251": [ + 33, + 34 + ], + "field_7252": null, + "field_7316": null, + "field_7308": null, + "field_7328": null, + "field_7309": null, + "field_7310": null, + "field_7289": null, + "field_7299": null, + "field_7294": null, + "field_7295": null, + "field_7296": null, + "field_7297": null, + "field_7317": null, + "field_7320": null, + "field_7329": null, + "field_7332": null + }, + { + "id": 13, + "order": "13.00000000000000000000", + "created_on": "2026-01-14T07:19:45.062842+00:00", + "updated_on": "2026-01-14T07:21:16.019206+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7248": "Campaign Launched", + "field_7326": null, + "field_7249": "Campaign goes live across channels", + "field_7250": [ + 3 + ], + "field_7251": [ + 35, + 36 + ], + "field_7252": null, + "field_7316": null, + "field_7308": null, + "field_7328": null, + "field_7309": null, + "field_7310": null, + "field_7289": null, + "field_7299": null, + "field_7294": null, + "field_7295": null, + "field_7296": null, + "field_7297": null, + "field_7317": null, + "field_7320": null, + "field_7329": null, + "field_7332": null + }, + { + "id": 14, + "order": "14.00000000000000000000", + "created_on": "2026-01-14T07:19:45.062850+00:00", + "updated_on": "2026-01-14T07:21:16.354840+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7248": "Performance Review", + "field_7326": null, + "field_7249": "Campaign KPIs reviewed", + "field_7250": [ + 3 + ], + "field_7251": [ + 37, + 38 + ], + "field_7252": null, + "field_7316": null, + "field_7308": null, + "field_7328": null, + "field_7309": null, + "field_7310": null, + "field_7289": null, + "field_7299": null, + "field_7294": null, + "field_7295": null, + "field_7296": null, + "field_7297": null, + "field_7317": null, + "field_7320": null, + "field_7329": null, + "field_7332": null + } + ], + "data_sync": null, + "field_rules": [] + }, + { + "id": 756, + "name": "Tasks", + "order": 7, + "fields": [ + { + "id": 7253, + "type": "text", + "name": "Name", + "description": null, + "order": 2, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 7254, + "type": "text", + "name": "Description", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 7255, + "type": "single_select", + "name": "Status", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "select_options": [ + { + "id": 3070, + "value": "To do", + "color": "light-cyan", + "order": 0 + }, + { + "id": 3071, + "value": "In progress", + "color": "light-yellow", + "order": 1 + }, + { + "id": 3072, + "value": "Ready for review", + "color": "light-blue", + "order": 2 + }, + { + "id": 3073, + "value": "Done", + "color": "light-green", + "order": 3 + } + ], + "single_select_default": 3070 + }, + { + "id": 7256, + "type": "single_select", + "name": "Priority", + "description": null, + "order": 5, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "select_options": [ + { + "id": 3074, + "value": "Critical", + "color": "dark-red", + "order": 0 + }, + { + "id": 3075, + "value": "High", + "color": "dark-yellow", + "order": 1 + }, + { + "id": 3076, + "value": "Medium", + "color": "dark-blue", + "order": 2 + }, + { + "id": 3077, + "value": "Low", + "color": "dark-cyan", + "order": 3 + } + ], + "single_select_default": 3076 + }, + { + "id": 7257, + "type": "link_row", + "name": "Assignee", + "description": null, + "order": 6, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 751, + "link_row_related_field_id": 7226, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 7258, + "type": "link_row", + "name": "Created by", + "description": null, + "order": 7, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 751, + "link_row_related_field_id": 7225, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 7259, + "type": "date", + "name": "Start date", + "description": null, + "order": 8, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_format": "ISO", + "date_include_time": false, + "date_time_format": "24", + "date_show_tzinfo": false, + "date_force_timezone": null + }, + { + "id": 7260, + "type": "date", + "name": "Due date", + "description": null, + "order": 9, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_format": "ISO", + "date_include_time": false, + "date_time_format": "24", + "date_show_tzinfo": false, + "date_force_timezone": null + }, + { + "id": 7261, + "type": "date", + "name": "Completion date", + "description": null, + "order": 10, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_format": "ISO", + "date_include_time": false, + "date_time_format": "24", + "date_show_tzinfo": false, + "date_force_timezone": null + }, + { + "id": 7262, + "type": "link_row", + "name": "Milestone", + "description": null, + "order": 14, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 755, + "link_row_related_field_id": 7251, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 7263, + "type": "link_row", + "name": "Project", + "description": null, + "order": 15, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 753, + "link_row_related_field_id": 7243, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 7264, + "type": "link_row", + "name": "Depends on", + "description": null, + "order": 16, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 756, + "link_row_related_field_id": null, + "link_row_limit_selection_view_id": null, + "has_related_field": false, + "link_row_multiple_relationships": true + }, + { + "id": 7265, + "type": "link_row", + "name": "Task messages", + "description": null, + "order": 17, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 758, + "link_row_related_field_id": 7281, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 7266, + "type": "link_row", + "name": "Reviewer", + "description": null, + "order": 18, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 751, + "link_row_related_field_id": 7228, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 7267, + "type": "link_row", + "name": "Task actions", + "description": null, + "order": 19, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 757, + "link_row_related_field_id": 7273, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 7323, + "type": "rollup", + "name": "Registered workload", + "description": null, + "order": 20, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": true, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": "h:mm", + "number_prefix": "", + "through_field_id": 7267, + "target_field_id": 7314, + "rollup_function": "sum" + }, + { + "id": 7268, + "type": "duration", + "name": "Task duration", + "description": null, + "order": 22, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "duration_format": "d h" + }, + { + "id": 7269, + "type": "link_row", + "name": "Task files", + "description": null, + "order": 23, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 759, + "link_row_related_field_id": 7283, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": true + }, + { + "id": 7311, + "type": "formula", + "name": "Days until due date", + "description": null, + "order": 24, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "if(field('Status') = 'Done',0,field('Due date') - today())", + "formula_type": "text" + }, + { + "id": 7312, + "type": "formula", + "name": "Blocked by", + "description": null, + "order": 25, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": "text", + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "filter(field('Depends on'),lookup('Depends on','Status') != 'Done')", + "formula_type": "array" + }, + { + "id": 7322, + "type": "formula", + "name": "Blocked icon", + "description": null, + "order": 26, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "if(count(field('Blocked by')) > 0,'\u26d4','')", + "formula_type": "text" + }, + { + "id": 7321, + "type": "formula", + "name": "Overdue icon", + "description": null, + "order": 27, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "if(tonumber(split_part(field('Days until due date'),' ',1)) < 0,'\u23f0','')", + "formula_type": "text" + }, + { + "id": 7333, + "type": "formula", + "name": "Name with icons", + "description": null, + "order": 28, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "concat(field('Blocked icon'),' ',field('Overdue icon'),' ',field('Difference icon'),' ',field('Name'))", + "formula_type": "text" + }, + { + "id": 7335, + "type": "lookup", + "name": "Depends on (icons)", + "description": null, + "order": 29, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": "text", + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "through_field_id": 7264, + "through_field_name": "Depends on", + "target_field_id": 7333, + "target_field_name": "Name with icons" + }, + { + "id": 7270, + "type": "number", + "name": "Estimated workload", + "description": null, + "order": 30, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_decimal_places": 0, + "number_negative": false, + "number_prefix": "", + "number_suffix": "", + "number_separator": "", + "number_default": null + }, + { + "id": 7327, + "type": "formula", + "name": "Workload difference", + "description": null, + "order": 31, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": true, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": "h:mm", + "number_prefix": "", + "formula": "field('Registered workload') - date_interval(concat(field('Estimated workload'),' hours'))", + "formula_type": "duration" + }, + { + "id": 7330, + "type": "formula", + "name": "Difference icon", + "description": null, + "order": 32, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "if(and(field('Status') != 'Done',toseconds(field('Workload difference')) > 0),'\u26a0\ufe0f','')", + "formula_type": "text" + }, + { + "id": 7313, + "type": "formula", + "name": "Notification mails", + "description": null, + "order": 33, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "join(concat(lookup('Assignee','Email'),',',lookup('Reviewer','Email'),',',lookup('Created by','Email')),'')", + "formula_type": "text" + }, + { + "id": 7271, + "type": "formula", + "name": "Row ID", + "description": null, + "order": 34, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": 0, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "formula": "row_id()", + "formula_type": "number" + }, + { + "id": 7334, + "type": "lookup", + "name": "Milestone (with status)", + "description": null, + "order": 35, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": false, + "number_separator": "", + "array_formula_type": "text", + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "through_field_id": 7262, + "through_field_name": "Milestone", + "target_field_id": 7332, + "target_field_name": "Name with icon" + } + ], + "views": [ + { + "id": 3357, + "type": "grid", + "name": "All tasks", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 27923, + "field_id": 7253, + "width": 200, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27924, + "field_id": 7254, + "width": 200, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27925, + "field_id": 7263, + "width": 200, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27926, + "field_id": 7262, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27927, + "field_id": 7334, + "width": 200, + "hidden": true, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27928, + "field_id": 7264, + "width": 200, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27929, + "field_id": 7335, + "width": 200, + "hidden": true, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27930, + "field_id": 7312, + "width": 200, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27931, + "field_id": 7322, + "width": 78, + "hidden": false, + "order": 8, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27932, + "field_id": 7255, + "width": 200, + "hidden": false, + "order": 9, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27933, + "field_id": 7256, + "width": 200, + "hidden": false, + "order": 10, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27934, + "field_id": 7257, + "width": 200, + "hidden": false, + "order": 11, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27935, + "field_id": 7266, + "width": 200, + "hidden": false, + "order": 12, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27936, + "field_id": 7258, + "width": 200, + "hidden": false, + "order": 13, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27937, + "field_id": 7313, + "width": 362, + "hidden": false, + "order": 14, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27938, + "field_id": 7270, + "width": 200, + "hidden": false, + "order": 15, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27939, + "field_id": 7323, + "width": 183, + "hidden": false, + "order": 16, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27940, + "field_id": 7327, + "width": 200, + "hidden": false, + "order": 17, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27941, + "field_id": 7330, + "width": 200, + "hidden": false, + "order": 18, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27942, + "field_id": 7259, + "width": 200, + "hidden": false, + "order": 19, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27943, + "field_id": 7260, + "width": 200, + "hidden": false, + "order": 20, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27944, + "field_id": 7311, + "width": 200, + "hidden": false, + "order": 21, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27945, + "field_id": 7321, + "width": 78, + "hidden": false, + "order": 22, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27946, + "field_id": 7268, + "width": 200, + "hidden": false, + "order": 23, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27947, + "field_id": 7261, + "width": 200, + "hidden": false, + "order": 24, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27948, + "field_id": 7265, + "width": 200, + "hidden": false, + "order": 25, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27949, + "field_id": 7267, + "width": 200, + "hidden": false, + "order": 26, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27950, + "field_id": 7269, + "width": 200, + "hidden": false, + "order": 27, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27951, + "field_id": 7333, + "width": 200, + "hidden": false, + "order": 28, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27952, + "field_id": 7271, + "width": 200, + "hidden": true, + "order": 30, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 3358, + "type": "grid", + "name": "Grid: CRM System Upgrade", + "order": 2, + "ownership_type": "collaborative", + "owned_by": null, + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 1816, + "field_id": 7263, + "type": "link_row_has", + "value": "1", + "group": null + } + ], + "filter_groups": [], + "sortings": [ + { + "id": 2483, + "field_id": 7259, + "order": "ASC" + } + ], + "group_bys": [ + { + "id": 338, + "field_id": 7262, + "order": "ASC" + } + ], + "decorations": [], + "public": true, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 27953, + "field_id": 7253, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27954, + "field_id": 7254, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27955, + "field_id": 7255, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27956, + "field_id": 7256, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27957, + "field_id": 7257, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27958, + "field_id": 7258, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27959, + "field_id": 7259, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27960, + "field_id": 7260, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27961, + "field_id": 7261, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27962, + "field_id": 7262, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27963, + "field_id": 7263, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27964, + "field_id": 7264, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27965, + "field_id": 7265, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27966, + "field_id": 7266, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27967, + "field_id": 7267, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27968, + "field_id": 7268, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27969, + "field_id": 7269, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27970, + "field_id": 7270, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27971, + "field_id": 7271, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27972, + "field_id": 7311, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27973, + "field_id": 7312, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27974, + "field_id": 7313, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27975, + "field_id": 7321, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27976, + "field_id": 7322, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27977, + "field_id": 7323, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27978, + "field_id": 7327, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27979, + "field_id": 7330, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27980, + "field_id": 7333, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27981, + "field_id": 7334, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27982, + "field_id": 7335, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 3359, + "type": "timeline", + "name": "Timeline: CRM System Upgrade", + "order": 3, + "ownership_type": "collaborative", + "owned_by": null, + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 1817, + "field_id": 7263, + "type": "link_row_has", + "value": "1", + "group": null + } + ], + "filter_groups": [], + "sortings": [], + "decorations": [ + { + "id": 676, + "type": "background_color", + "value_provider_type": "single_select_color", + "value_provider_conf": { + "field_id": 7255 + }, + "order": 1 + } + ], + "public": true, + "start_date_field_id": 7259, + "end_date_field_id": 7260, + "field_options": [ + { + "id": 240, + "field_id": 7253, + "hidden": false, + "order": 32767 + }, + { + "id": 241, + "field_id": 7254, + "hidden": true, + "order": 32767 + }, + { + "id": 242, + "field_id": 7255, + "hidden": true, + "order": 32767 + }, + { + "id": 243, + "field_id": 7256, + "hidden": true, + "order": 32767 + }, + { + "id": 244, + "field_id": 7257, + "hidden": true, + "order": 32767 + }, + { + "id": 245, + "field_id": 7258, + "hidden": true, + "order": 32767 + }, + { + "id": 246, + "field_id": 7259, + "hidden": true, + "order": 32767 + }, + { + "id": 247, + "field_id": 7260, + "hidden": true, + "order": 32767 + }, + { + "id": 248, + "field_id": 7261, + "hidden": true, + "order": 32767 + }, + { + "id": 249, + "field_id": 7262, + "hidden": true, + "order": 32767 + }, + { + "id": 250, + "field_id": 7263, + "hidden": true, + "order": 32767 + }, + { + "id": 251, + "field_id": 7264, + "hidden": true, + "order": 32767 + }, + { + "id": 252, + "field_id": 7265, + "hidden": true, + "order": 32767 + }, + { + "id": 253, + "field_id": 7266, + "hidden": true, + "order": 32767 + }, + { + "id": 254, + "field_id": 7267, + "hidden": true, + "order": 32767 + }, + { + "id": 255, + "field_id": 7268, + "hidden": true, + "order": 32767 + }, + { + "id": 256, + "field_id": 7269, + "hidden": true, + "order": 32767 + }, + { + "id": 257, + "field_id": 7270, + "hidden": true, + "order": 32767 + }, + { + "id": 258, + "field_id": 7271, + "hidden": true, + "order": 32767 + }, + { + "id": 259, + "field_id": 7311, + "hidden": true, + "order": 32767 + }, + { + "id": 260, + "field_id": 7312, + "hidden": true, + "order": 32767 + }, + { + "id": 261, + "field_id": 7313, + "hidden": true, + "order": 32767 + }, + { + "id": 262, + "field_id": 7321, + "hidden": true, + "order": 32767 + }, + { + "id": 263, + "field_id": 7322, + "hidden": true, + "order": 32767 + }, + { + "id": 264, + "field_id": 7323, + "hidden": true, + "order": 32767 + }, + { + "id": 265, + "field_id": 7327, + "hidden": true, + "order": 32767 + }, + { + "id": 266, + "field_id": 7330, + "hidden": true, + "order": 32767 + }, + { + "id": 267, + "field_id": 7333, + "hidden": true, + "order": 32767 + }, + { + "id": 268, + "field_id": 7334, + "hidden": true, + "order": 32767 + }, + { + "id": 269, + "field_id": 7335, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 3360, + "type": "kanban", + "name": "Kanban: CRM System Upgrade", + "order": 4, + "ownership_type": "collaborative", + "owned_by": null, + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 1818, + "field_id": 7263, + "type": "link_row_has", + "value": "2", + "group": null + } + ], + "filter_groups": [], + "sortings": [ + { + "id": 2484, + "field_id": 7259, + "order": "ASC" + } + ], + "decorations": [], + "public": true, + "single_select_field_id": 7255, + "field_options": [ + { + "id": 3795, + "field_id": 7253, + "hidden": false, + "order": 32767 + }, + { + "id": 3796, + "field_id": 7254, + "hidden": false, + "order": 32767 + }, + { + "id": 3797, + "field_id": 7255, + "hidden": false, + "order": 32767 + }, + { + "id": 3798, + "field_id": 7256, + "hidden": false, + "order": 32767 + }, + { + "id": 3799, + "field_id": 7257, + "hidden": false, + "order": 32767 + }, + { + "id": 3800, + "field_id": 7258, + "hidden": false, + "order": 32767 + }, + { + "id": 3801, + "field_id": 7259, + "hidden": false, + "order": 32767 + }, + { + "id": 3802, + "field_id": 7260, + "hidden": false, + "order": 32767 + }, + { + "id": 3803, + "field_id": 7261, + "hidden": false, + "order": 32767 + }, + { + "id": 3804, + "field_id": 7262, + "hidden": false, + "order": 32767 + }, + { + "id": 3805, + "field_id": 7263, + "hidden": false, + "order": 32767 + }, + { + "id": 3806, + "field_id": 7264, + "hidden": false, + "order": 32767 + }, + { + "id": 3807, + "field_id": 7265, + "hidden": false, + "order": 32767 + }, + { + "id": 3808, + "field_id": 7266, + "hidden": false, + "order": 32767 + }, + { + "id": 3809, + "field_id": 7267, + "hidden": false, + "order": 32767 + }, + { + "id": 3810, + "field_id": 7268, + "hidden": false, + "order": 32767 + }, + { + "id": 3811, + "field_id": 7269, + "hidden": false, + "order": 32767 + }, + { + "id": 3812, + "field_id": 7270, + "hidden": false, + "order": 32767 + }, + { + "id": 3813, + "field_id": 7271, + "hidden": false, + "order": 32767 + }, + { + "id": 3814, + "field_id": 7311, + "hidden": false, + "order": 32767 + }, + { + "id": 3815, + "field_id": 7312, + "hidden": false, + "order": 32767 + }, + { + "id": 3816, + "field_id": 7313, + "hidden": false, + "order": 32767 + }, + { + "id": 3817, + "field_id": 7321, + "hidden": false, + "order": 32767 + }, + { + "id": 3818, + "field_id": 7322, + "hidden": false, + "order": 32767 + }, + { + "id": 3819, + "field_id": 7323, + "hidden": false, + "order": 32767 + }, + { + "id": 3820, + "field_id": 7327, + "hidden": false, + "order": 32767 + }, + { + "id": 3821, + "field_id": 7330, + "hidden": false, + "order": 32767 + }, + { + "id": 3822, + "field_id": 7333, + "hidden": false, + "order": 32767 + }, + { + "id": 3823, + "field_id": 7334, + "hidden": false, + "order": 32767 + }, + { + "id": 3824, + "field_id": 7335, + "hidden": false, + "order": 32767 + } + ] + }, + { + "id": 3361, + "type": "calendar", + "name": "Calendar: CRM System Upgrade", + "order": 5, + "ownership_type": "collaborative", + "owned_by": null, + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 1819, + "field_id": 7263, + "type": "link_row_has", + "value": "1", + "group": null + } + ], + "filter_groups": [], + "sortings": [], + "decorations": [ + { + "id": 677, + "type": "background_color", + "value_provider_type": "single_select_color", + "value_provider_conf": { + "field_id": 7255 + }, + "order": 1 + } + ], + "public": true, + "date_field_id": 7259, + "field_options": [ + { + "id": 783, + "field_id": 7253, + "hidden": false, + "order": 32767 + }, + { + "id": 784, + "field_id": 7254, + "hidden": true, + "order": 32767 + }, + { + "id": 785, + "field_id": 7255, + "hidden": true, + "order": 32767 + }, + { + "id": 786, + "field_id": 7256, + "hidden": true, + "order": 32767 + }, + { + "id": 787, + "field_id": 7257, + "hidden": true, + "order": 32767 + }, + { + "id": 788, + "field_id": 7258, + "hidden": true, + "order": 32767 + }, + { + "id": 789, + "field_id": 7259, + "hidden": true, + "order": 32767 + }, + { + "id": 790, + "field_id": 7260, + "hidden": true, + "order": 32767 + }, + { + "id": 791, + "field_id": 7261, + "hidden": true, + "order": 32767 + }, + { + "id": 792, + "field_id": 7262, + "hidden": true, + "order": 32767 + }, + { + "id": 793, + "field_id": 7263, + "hidden": true, + "order": 32767 + }, + { + "id": 794, + "field_id": 7264, + "hidden": true, + "order": 32767 + }, + { + "id": 795, + "field_id": 7265, + "hidden": true, + "order": 32767 + }, + { + "id": 796, + "field_id": 7266, + "hidden": true, + "order": 32767 + }, + { + "id": 797, + "field_id": 7267, + "hidden": true, + "order": 32767 + }, + { + "id": 798, + "field_id": 7268, + "hidden": true, + "order": 32767 + }, + { + "id": 799, + "field_id": 7269, + "hidden": true, + "order": 32767 + }, + { + "id": 800, + "field_id": 7270, + "hidden": true, + "order": 32767 + }, + { + "id": 801, + "field_id": 7271, + "hidden": true, + "order": 32767 + }, + { + "id": 802, + "field_id": 7311, + "hidden": true, + "order": 32767 + }, + { + "id": 803, + "field_id": 7312, + "hidden": true, + "order": 32767 + }, + { + "id": 804, + "field_id": 7313, + "hidden": true, + "order": 32767 + }, + { + "id": 805, + "field_id": 7321, + "hidden": true, + "order": 32767 + }, + { + "id": 806, + "field_id": 7322, + "hidden": true, + "order": 32767 + }, + { + "id": 807, + "field_id": 7323, + "hidden": true, + "order": 32767 + }, + { + "id": 808, + "field_id": 7327, + "hidden": true, + "order": 32767 + }, + { + "id": 809, + "field_id": 7330, + "hidden": true, + "order": 32767 + }, + { + "id": 810, + "field_id": 7333, + "hidden": true, + "order": 32767 + }, + { + "id": 811, + "field_id": 7334, + "hidden": true, + "order": 32767 + }, + { + "id": 812, + "field_id": 7335, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 3362, + "type": "grid", + "name": "Grid: ISO 27001 Compliance", + "order": 6, + "ownership_type": "collaborative", + "owned_by": null, + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 1820, + "field_id": 7263, + "type": "link_row_has", + "value": "2", + "group": null + } + ], + "filter_groups": [], + "sortings": [ + { + "id": 2485, + "field_id": 7259, + "order": "ASC" + } + ], + "group_bys": [ + { + "id": 339, + "field_id": 7262, + "order": "ASC" + } + ], + "decorations": [], + "public": true, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 27983, + "field_id": 7253, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27984, + "field_id": 7254, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27985, + "field_id": 7255, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27986, + "field_id": 7256, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27987, + "field_id": 7257, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27988, + "field_id": 7258, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27989, + "field_id": 7259, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27990, + "field_id": 7260, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27991, + "field_id": 7261, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27992, + "field_id": 7262, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27993, + "field_id": 7263, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27994, + "field_id": 7264, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27995, + "field_id": 7265, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27996, + "field_id": 7266, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27997, + "field_id": 7267, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27998, + "field_id": 7268, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 27999, + "field_id": 7269, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28000, + "field_id": 7270, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28001, + "field_id": 7271, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28002, + "field_id": 7311, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28003, + "field_id": 7312, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28004, + "field_id": 7313, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28005, + "field_id": 7321, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28006, + "field_id": 7322, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28007, + "field_id": 7323, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28008, + "field_id": 7327, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28009, + "field_id": 7330, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28010, + "field_id": 7333, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28011, + "field_id": 7334, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28012, + "field_id": 7335, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 3363, + "type": "timeline", + "name": "Timeline: ISO 27001 Compliance", + "order": 7, + "ownership_type": "collaborative", + "owned_by": null, + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 1821, + "field_id": 7263, + "type": "link_row_has", + "value": "2", + "group": null + } + ], + "filter_groups": [], + "sortings": [], + "decorations": [ + { + "id": 678, + "type": "background_color", + "value_provider_type": "single_select_color", + "value_provider_conf": { + "field_id": 7255 + }, + "order": 1 + } + ], + "public": true, + "start_date_field_id": 7259, + "end_date_field_id": 7260, + "field_options": [ + { + "id": 270, + "field_id": 7253, + "hidden": false, + "order": 32767 + }, + { + "id": 271, + "field_id": 7254, + "hidden": true, + "order": 32767 + }, + { + "id": 272, + "field_id": 7255, + "hidden": true, + "order": 32767 + }, + { + "id": 273, + "field_id": 7256, + "hidden": true, + "order": 32767 + }, + { + "id": 274, + "field_id": 7257, + "hidden": true, + "order": 32767 + }, + { + "id": 275, + "field_id": 7258, + "hidden": true, + "order": 32767 + }, + { + "id": 276, + "field_id": 7259, + "hidden": true, + "order": 32767 + }, + { + "id": 277, + "field_id": 7260, + "hidden": true, + "order": 32767 + }, + { + "id": 278, + "field_id": 7261, + "hidden": true, + "order": 32767 + }, + { + "id": 279, + "field_id": 7262, + "hidden": true, + "order": 32767 + }, + { + "id": 280, + "field_id": 7263, + "hidden": true, + "order": 32767 + }, + { + "id": 281, + "field_id": 7264, + "hidden": true, + "order": 32767 + }, + { + "id": 282, + "field_id": 7265, + "hidden": true, + "order": 32767 + }, + { + "id": 283, + "field_id": 7266, + "hidden": true, + "order": 32767 + }, + { + "id": 284, + "field_id": 7267, + "hidden": true, + "order": 32767 + }, + { + "id": 285, + "field_id": 7268, + "hidden": true, + "order": 32767 + }, + { + "id": 286, + "field_id": 7269, + "hidden": true, + "order": 32767 + }, + { + "id": 287, + "field_id": 7270, + "hidden": true, + "order": 32767 + }, + { + "id": 288, + "field_id": 7271, + "hidden": true, + "order": 32767 + }, + { + "id": 289, + "field_id": 7311, + "hidden": true, + "order": 32767 + }, + { + "id": 290, + "field_id": 7312, + "hidden": true, + "order": 32767 + }, + { + "id": 291, + "field_id": 7313, + "hidden": true, + "order": 32767 + }, + { + "id": 292, + "field_id": 7321, + "hidden": true, + "order": 32767 + }, + { + "id": 293, + "field_id": 7322, + "hidden": true, + "order": 32767 + }, + { + "id": 294, + "field_id": 7323, + "hidden": true, + "order": 32767 + }, + { + "id": 295, + "field_id": 7327, + "hidden": true, + "order": 32767 + }, + { + "id": 296, + "field_id": 7330, + "hidden": true, + "order": 32767 + }, + { + "id": 297, + "field_id": 7333, + "hidden": true, + "order": 32767 + }, + { + "id": 298, + "field_id": 7334, + "hidden": true, + "order": 32767 + }, + { + "id": 299, + "field_id": 7335, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 3364, + "type": "kanban", + "name": "Kanban: ISO 27001 Compliance", + "order": 8, + "ownership_type": "collaborative", + "owned_by": null, + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 1822, + "field_id": 7263, + "type": "link_row_has", + "value": "2", + "group": null + } + ], + "filter_groups": [], + "sortings": [ + { + "id": 2486, + "field_id": 7259, + "order": "ASC" + } + ], + "decorations": [], + "public": true, + "single_select_field_id": 7255, + "field_options": [ + { + "id": 3825, + "field_id": 7253, + "hidden": false, + "order": 32767 + }, + { + "id": 3826, + "field_id": 7254, + "hidden": false, + "order": 32767 + }, + { + "id": 3827, + "field_id": 7255, + "hidden": false, + "order": 32767 + }, + { + "id": 3828, + "field_id": 7256, + "hidden": false, + "order": 32767 + }, + { + "id": 3829, + "field_id": 7257, + "hidden": false, + "order": 32767 + }, + { + "id": 3830, + "field_id": 7258, + "hidden": false, + "order": 32767 + }, + { + "id": 3831, + "field_id": 7259, + "hidden": false, + "order": 32767 + }, + { + "id": 3832, + "field_id": 7260, + "hidden": false, + "order": 32767 + }, + { + "id": 3833, + "field_id": 7261, + "hidden": false, + "order": 32767 + }, + { + "id": 3834, + "field_id": 7262, + "hidden": false, + "order": 32767 + }, + { + "id": 3835, + "field_id": 7263, + "hidden": false, + "order": 32767 + }, + { + "id": 3836, + "field_id": 7264, + "hidden": false, + "order": 32767 + }, + { + "id": 3837, + "field_id": 7265, + "hidden": false, + "order": 32767 + }, + { + "id": 3838, + "field_id": 7266, + "hidden": false, + "order": 32767 + }, + { + "id": 3839, + "field_id": 7267, + "hidden": false, + "order": 32767 + }, + { + "id": 3840, + "field_id": 7268, + "hidden": false, + "order": 32767 + }, + { + "id": 3841, + "field_id": 7269, + "hidden": false, + "order": 32767 + }, + { + "id": 3842, + "field_id": 7270, + "hidden": false, + "order": 32767 + }, + { + "id": 3843, + "field_id": 7271, + "hidden": false, + "order": 32767 + }, + { + "id": 3844, + "field_id": 7311, + "hidden": false, + "order": 32767 + }, + { + "id": 3845, + "field_id": 7312, + "hidden": false, + "order": 32767 + }, + { + "id": 3846, + "field_id": 7313, + "hidden": false, + "order": 32767 + }, + { + "id": 3847, + "field_id": 7321, + "hidden": false, + "order": 32767 + }, + { + "id": 3848, + "field_id": 7322, + "hidden": false, + "order": 32767 + }, + { + "id": 3849, + "field_id": 7323, + "hidden": false, + "order": 32767 + }, + { + "id": 3850, + "field_id": 7327, + "hidden": false, + "order": 32767 + }, + { + "id": 3851, + "field_id": 7330, + "hidden": false, + "order": 32767 + }, + { + "id": 3852, + "field_id": 7333, + "hidden": false, + "order": 32767 + }, + { + "id": 3853, + "field_id": 7334, + "hidden": false, + "order": 32767 + }, + { + "id": 3854, + "field_id": 7335, + "hidden": false, + "order": 32767 + } + ] + }, + { + "id": 3365, + "type": "calendar", + "name": "Calendar: ISO 27001 Compliance", + "order": 9, + "ownership_type": "collaborative", + "owned_by": null, + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 1823, + "field_id": 7263, + "type": "link_row_has", + "value": "2", + "group": null + } + ], + "filter_groups": [], + "sortings": [], + "decorations": [ + { + "id": 679, + "type": "background_color", + "value_provider_type": "single_select_color", + "value_provider_conf": { + "field_id": 7255 + }, + "order": 1 + } + ], + "public": true, + "date_field_id": 7259, + "field_options": [ + { + "id": 813, + "field_id": 7253, + "hidden": false, + "order": 32767 + }, + { + "id": 814, + "field_id": 7254, + "hidden": true, + "order": 32767 + }, + { + "id": 815, + "field_id": 7255, + "hidden": true, + "order": 32767 + }, + { + "id": 816, + "field_id": 7256, + "hidden": true, + "order": 32767 + }, + { + "id": 817, + "field_id": 7257, + "hidden": true, + "order": 32767 + }, + { + "id": 818, + "field_id": 7258, + "hidden": true, + "order": 32767 + }, + { + "id": 819, + "field_id": 7259, + "hidden": true, + "order": 32767 + }, + { + "id": 820, + "field_id": 7260, + "hidden": true, + "order": 32767 + }, + { + "id": 821, + "field_id": 7261, + "hidden": true, + "order": 32767 + }, + { + "id": 822, + "field_id": 7262, + "hidden": true, + "order": 32767 + }, + { + "id": 823, + "field_id": 7263, + "hidden": true, + "order": 32767 + }, + { + "id": 824, + "field_id": 7264, + "hidden": true, + "order": 32767 + }, + { + "id": 825, + "field_id": 7265, + "hidden": true, + "order": 32767 + }, + { + "id": 826, + "field_id": 7266, + "hidden": true, + "order": 32767 + }, + { + "id": 827, + "field_id": 7267, + "hidden": true, + "order": 32767 + }, + { + "id": 828, + "field_id": 7268, + "hidden": true, + "order": 32767 + }, + { + "id": 829, + "field_id": 7269, + "hidden": true, + "order": 32767 + }, + { + "id": 830, + "field_id": 7270, + "hidden": true, + "order": 32767 + }, + { + "id": 831, + "field_id": 7271, + "hidden": true, + "order": 32767 + }, + { + "id": 832, + "field_id": 7311, + "hidden": true, + "order": 32767 + }, + { + "id": 833, + "field_id": 7312, + "hidden": true, + "order": 32767 + }, + { + "id": 834, + "field_id": 7313, + "hidden": true, + "order": 32767 + }, + { + "id": 835, + "field_id": 7321, + "hidden": true, + "order": 32767 + }, + { + "id": 836, + "field_id": 7322, + "hidden": true, + "order": 32767 + }, + { + "id": 837, + "field_id": 7323, + "hidden": true, + "order": 32767 + }, + { + "id": 838, + "field_id": 7327, + "hidden": true, + "order": 32767 + }, + { + "id": 839, + "field_id": 7330, + "hidden": true, + "order": 32767 + }, + { + "id": 840, + "field_id": 7333, + "hidden": true, + "order": 32767 + }, + { + "id": 841, + "field_id": 7334, + "hidden": true, + "order": 32767 + }, + { + "id": 842, + "field_id": 7335, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 3369, + "type": "grid", + "name": "Grid: Spring Marketing Campaign", + "order": 12, + "ownership_type": "collaborative", + "owned_by": null, + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 1827, + "field_id": 7263, + "type": "link_row_has", + "value": "3", + "group": null + } + ], + "filter_groups": [], + "sortings": [ + { + "id": 2488, + "field_id": 7259, + "order": "ASC" + } + ], + "group_bys": [ + { + "id": 340, + "field_id": 7262, + "order": "ASC" + } + ], + "decorations": [], + "public": true, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 28013, + "field_id": 7253, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28014, + "field_id": 7254, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28015, + "field_id": 7255, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28016, + "field_id": 7256, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28017, + "field_id": 7257, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28018, + "field_id": 7258, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28019, + "field_id": 7259, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28020, + "field_id": 7260, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28021, + "field_id": 7261, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28022, + "field_id": 7262, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28023, + "field_id": 7263, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28024, + "field_id": 7264, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28025, + "field_id": 7265, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28026, + "field_id": 7266, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28027, + "field_id": 7267, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28028, + "field_id": 7268, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28029, + "field_id": 7269, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28030, + "field_id": 7270, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28031, + "field_id": 7271, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28032, + "field_id": 7311, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28033, + "field_id": 7312, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28034, + "field_id": 7313, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28035, + "field_id": 7321, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28036, + "field_id": 7322, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28037, + "field_id": 7323, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28038, + "field_id": 7327, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28039, + "field_id": 7330, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28040, + "field_id": 7333, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28041, + "field_id": 7334, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28042, + "field_id": 7335, + "width": 200, + "hidden": false, + "order": 32767, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 3366, + "type": "calendar", + "name": "Calendar: Spring Marketing Campaign", + "order": 12, + "ownership_type": "collaborative", + "owned_by": null, + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 1824, + "field_id": 7263, + "type": "link_row_has", + "value": "3", + "group": null + } + ], + "filter_groups": [], + "sortings": [], + "decorations": [ + { + "id": 680, + "type": "background_color", + "value_provider_type": "single_select_color", + "value_provider_conf": { + "field_id": 7255 + }, + "order": 1 + } + ], + "public": true, + "date_field_id": 7259, + "field_options": [ + { + "id": 843, + "field_id": 7253, + "hidden": false, + "order": 32767 + }, + { + "id": 844, + "field_id": 7254, + "hidden": true, + "order": 32767 + }, + { + "id": 845, + "field_id": 7255, + "hidden": true, + "order": 32767 + }, + { + "id": 846, + "field_id": 7256, + "hidden": true, + "order": 32767 + }, + { + "id": 847, + "field_id": 7257, + "hidden": true, + "order": 32767 + }, + { + "id": 848, + "field_id": 7258, + "hidden": true, + "order": 32767 + }, + { + "id": 849, + "field_id": 7259, + "hidden": true, + "order": 32767 + }, + { + "id": 850, + "field_id": 7260, + "hidden": true, + "order": 32767 + }, + { + "id": 851, + "field_id": 7261, + "hidden": true, + "order": 32767 + }, + { + "id": 852, + "field_id": 7262, + "hidden": true, + "order": 32767 + }, + { + "id": 853, + "field_id": 7263, + "hidden": true, + "order": 32767 + }, + { + "id": 854, + "field_id": 7264, + "hidden": true, + "order": 32767 + }, + { + "id": 855, + "field_id": 7265, + "hidden": true, + "order": 32767 + }, + { + "id": 856, + "field_id": 7266, + "hidden": true, + "order": 32767 + }, + { + "id": 857, + "field_id": 7267, + "hidden": true, + "order": 32767 + }, + { + "id": 858, + "field_id": 7268, + "hidden": true, + "order": 32767 + }, + { + "id": 859, + "field_id": 7269, + "hidden": true, + "order": 32767 + }, + { + "id": 860, + "field_id": 7270, + "hidden": true, + "order": 32767 + }, + { + "id": 861, + "field_id": 7271, + "hidden": true, + "order": 32767 + }, + { + "id": 862, + "field_id": 7311, + "hidden": true, + "order": 32767 + }, + { + "id": 863, + "field_id": 7312, + "hidden": true, + "order": 32767 + }, + { + "id": 864, + "field_id": 7313, + "hidden": true, + "order": 32767 + }, + { + "id": 865, + "field_id": 7321, + "hidden": true, + "order": 32767 + }, + { + "id": 866, + "field_id": 7322, + "hidden": true, + "order": 32767 + }, + { + "id": 867, + "field_id": 7323, + "hidden": true, + "order": 32767 + }, + { + "id": 868, + "field_id": 7327, + "hidden": true, + "order": 32767 + }, + { + "id": 869, + "field_id": 7330, + "hidden": true, + "order": 32767 + }, + { + "id": 870, + "field_id": 7333, + "hidden": true, + "order": 32767 + }, + { + "id": 871, + "field_id": 7334, + "hidden": true, + "order": 32767 + }, + { + "id": 872, + "field_id": 7335, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 3367, + "type": "timeline", + "name": "Timeline: Spring Marketing Campaign", + "order": 12, + "ownership_type": "collaborative", + "owned_by": null, + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 1825, + "field_id": 7263, + "type": "link_row_has", + "value": "3", + "group": null + } + ], + "filter_groups": [], + "sortings": [], + "decorations": [ + { + "id": 681, + "type": "background_color", + "value_provider_type": "single_select_color", + "value_provider_conf": { + "field_id": 7255 + }, + "order": 1 + } + ], + "public": true, + "start_date_field_id": 7259, + "end_date_field_id": 7260, + "field_options": [ + { + "id": 300, + "field_id": 7253, + "hidden": false, + "order": 32767 + }, + { + "id": 301, + "field_id": 7254, + "hidden": true, + "order": 32767 + }, + { + "id": 302, + "field_id": 7255, + "hidden": true, + "order": 32767 + }, + { + "id": 303, + "field_id": 7256, + "hidden": true, + "order": 32767 + }, + { + "id": 304, + "field_id": 7257, + "hidden": true, + "order": 32767 + }, + { + "id": 305, + "field_id": 7258, + "hidden": true, + "order": 32767 + }, + { + "id": 306, + "field_id": 7259, + "hidden": true, + "order": 32767 + }, + { + "id": 307, + "field_id": 7260, + "hidden": true, + "order": 32767 + }, + { + "id": 308, + "field_id": 7261, + "hidden": true, + "order": 32767 + }, + { + "id": 309, + "field_id": 7262, + "hidden": true, + "order": 32767 + }, + { + "id": 310, + "field_id": 7263, + "hidden": true, + "order": 32767 + }, + { + "id": 311, + "field_id": 7264, + "hidden": true, + "order": 32767 + }, + { + "id": 312, + "field_id": 7265, + "hidden": true, + "order": 32767 + }, + { + "id": 313, + "field_id": 7266, + "hidden": true, + "order": 32767 + }, + { + "id": 314, + "field_id": 7267, + "hidden": true, + "order": 32767 + }, + { + "id": 315, + "field_id": 7268, + "hidden": true, + "order": 32767 + }, + { + "id": 316, + "field_id": 7269, + "hidden": true, + "order": 32767 + }, + { + "id": 317, + "field_id": 7270, + "hidden": true, + "order": 32767 + }, + { + "id": 318, + "field_id": 7271, + "hidden": true, + "order": 32767 + }, + { + "id": 319, + "field_id": 7311, + "hidden": true, + "order": 32767 + }, + { + "id": 320, + "field_id": 7312, + "hidden": true, + "order": 32767 + }, + { + "id": 321, + "field_id": 7313, + "hidden": true, + "order": 32767 + }, + { + "id": 322, + "field_id": 7321, + "hidden": true, + "order": 32767 + }, + { + "id": 323, + "field_id": 7322, + "hidden": true, + "order": 32767 + }, + { + "id": 324, + "field_id": 7323, + "hidden": true, + "order": 32767 + }, + { + "id": 325, + "field_id": 7327, + "hidden": true, + "order": 32767 + }, + { + "id": 326, + "field_id": 7330, + "hidden": true, + "order": 32767 + }, + { + "id": 327, + "field_id": 7333, + "hidden": true, + "order": 32767 + }, + { + "id": 328, + "field_id": 7334, + "hidden": true, + "order": 32767 + }, + { + "id": 329, + "field_id": 7335, + "hidden": true, + "order": 32767 + } + ] + }, + { + "id": 3368, + "type": "kanban", + "name": "Kanban: Spring Marketing Campaign", + "order": 12, + "ownership_type": "collaborative", + "owned_by": null, + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 1826, + "field_id": 7263, + "type": "link_row_has", + "value": "2", + "group": null + } + ], + "filter_groups": [], + "sortings": [ + { + "id": 2487, + "field_id": 7259, + "order": "ASC" + } + ], + "decorations": [], + "public": true, + "single_select_field_id": 7255, + "field_options": [ + { + "id": 3855, + "field_id": 7253, + "hidden": false, + "order": 32767 + }, + { + "id": 3856, + "field_id": 7254, + "hidden": false, + "order": 32767 + }, + { + "id": 3857, + "field_id": 7255, + "hidden": false, + "order": 32767 + }, + { + "id": 3858, + "field_id": 7256, + "hidden": false, + "order": 32767 + }, + { + "id": 3859, + "field_id": 7257, + "hidden": false, + "order": 32767 + }, + { + "id": 3860, + "field_id": 7258, + "hidden": false, + "order": 32767 + }, + { + "id": 3861, + "field_id": 7259, + "hidden": false, + "order": 32767 + }, + { + "id": 3862, + "field_id": 7260, + "hidden": false, + "order": 32767 + }, + { + "id": 3863, + "field_id": 7261, + "hidden": false, + "order": 32767 + }, + { + "id": 3864, + "field_id": 7262, + "hidden": false, + "order": 32767 + }, + { + "id": 3865, + "field_id": 7263, + "hidden": false, + "order": 32767 + }, + { + "id": 3866, + "field_id": 7264, + "hidden": false, + "order": 32767 + }, + { + "id": 3867, + "field_id": 7265, + "hidden": false, + "order": 32767 + }, + { + "id": 3868, + "field_id": 7266, + "hidden": false, + "order": 32767 + }, + { + "id": 3869, + "field_id": 7267, + "hidden": false, + "order": 32767 + }, + { + "id": 3870, + "field_id": 7268, + "hidden": false, + "order": 32767 + }, + { + "id": 3871, + "field_id": 7269, + "hidden": false, + "order": 32767 + }, + { + "id": 3872, + "field_id": 7270, + "hidden": false, + "order": 32767 + }, + { + "id": 3873, + "field_id": 7271, + "hidden": false, + "order": 32767 + }, + { + "id": 3874, + "field_id": 7311, + "hidden": false, + "order": 32767 + }, + { + "id": 3875, + "field_id": 7312, + "hidden": false, + "order": 32767 + }, + { + "id": 3876, + "field_id": 7313, + "hidden": false, + "order": 32767 + }, + { + "id": 3877, + "field_id": 7321, + "hidden": false, + "order": 32767 + }, + { + "id": 3878, + "field_id": 7322, + "hidden": false, + "order": 32767 + }, + { + "id": 3879, + "field_id": 7323, + "hidden": false, + "order": 32767 + }, + { + "id": 3880, + "field_id": 7327, + "hidden": false, + "order": 32767 + }, + { + "id": 3881, + "field_id": 7330, + "hidden": false, + "order": 32767 + }, + { + "id": 3882, + "field_id": 7333, + "hidden": false, + "order": 32767 + }, + { + "id": 3883, + "field_id": 7334, + "hidden": false, + "order": 32767 + }, + { + "id": 3884, + "field_id": 7335, + "hidden": false, + "order": 32767 + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883004+00:00", + "updated_on": "2026-01-22T14:01:25.105875+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Define CRM entities", + "field_7254": "List customers, deals, activities", + "field_7255": 3073, + "field_7256": 3075, + "field_7257": [ + 2 + ], + "field_7258": [ + 2 + ], + "field_7259": "2026-02-04", + "field_7260": "2026-02-08", + "field_7261": "2026-01-19", + "field_7262": [ + 1 + ], + "field_7263": [ + 1 + ], + "field_7264": [], + "field_7265": [ + 1, + 3, + 4, + 56 + ], + "field_7266": [ + 14 + ], + "field_7267": [ + 1, + 2, + 3, + 4 + ], + "field_7323": null, + "field_7268": 432000.0, + "field_7269": [ + 1 + ], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "6", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 2, + "order": "2.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883038+00:00", + "updated_on": "2026-02-03T11:27:23.796258+00:00", + "created_by": "frederik@baserow.io", + "field_7253": "Design CRM relationships", + "field_7254": "Link customers to orders and tickets", + "field_7255": 3072, + "field_7256": 3075, + "field_7257": [ + 2 + ], + "field_7258": [ + 2 + ], + "field_7259": "2026-02-04", + "field_7260": "2026-02-08", + "field_7261": "2025-02-09", + "field_7262": [ + 1 + ], + "field_7263": [ + 1 + ], + "field_7264": [], + "field_7265": [ + 6, + 7, + 8 + ], + "field_7266": [ + 14 + ], + "field_7267": [ + 5, + 6, + 7, + 8 + ], + "field_7323": null, + "field_7268": 432000.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "6", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883052+00:00", + "updated_on": "2026-01-22T14:00:27.015257+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Approve data model", + "field_7254": "Business sign-off of CRM schema", + "field_7255": 3070, + "field_7256": 3076, + "field_7257": [ + 2 + ], + "field_7258": [ + 2 + ], + "field_7259": "2026-02-12", + "field_7260": "2026-02-17", + "field_7261": "2026-01-19", + "field_7262": [ + 1 + ], + "field_7263": [ + 1 + ], + "field_7264": [ + 1, + 2 + ], + "field_7265": [], + "field_7266": [ + 14 + ], + "field_7267": [ + 9, + 10, + 11, + 12 + ], + "field_7323": null, + "field_7268": 518400.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "4", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883066+00:00", + "updated_on": "2026-01-15T08:06:56.919022+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Build customer module", + "field_7254": "Implement customer tables and UI", + "field_7255": 3071, + "field_7256": 3075, + "field_7257": [ + 14 + ], + "field_7258": [ + 14 + ], + "field_7259": "2026-02-18", + "field_7260": "2026-03-03", + "field_7261": null, + "field_7262": [ + 2 + ], + "field_7263": [ + 1 + ], + "field_7264": [ + 3 + ], + "field_7265": [ + 10, + 11, + 12, + 13 + ], + "field_7266": [ + 2 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 1209600.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "10", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 5, + "order": "5.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883079+00:00", + "updated_on": "2026-01-22T14:01:41.928281+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Build sales pipeline", + "field_7254": "Create deals and stages", + "field_7255": 3072, + "field_7256": 3075, + "field_7257": [ + 14 + ], + "field_7258": [ + 2 + ], + "field_7259": "2026-03-04", + "field_7260": "2026-03-20", + "field_7261": null, + "field_7262": [ + 2 + ], + "field_7263": [ + 1 + ], + "field_7264": [ + 4 + ], + "field_7265": [], + "field_7266": [ + 2 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 1468800.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "10", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 6, + "order": "6.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883092+00:00", + "updated_on": "2026-01-15T08:09:47.717808+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Import legacy CRM data", + "field_7254": "Migrate historical customer data", + "field_7255": 3070, + "field_7256": 3076, + "field_7257": [ + 17 + ], + "field_7258": [ + 17 + ], + "field_7259": "2026-02-14", + "field_7260": "2026-02-23", + "field_7261": null, + "field_7262": [ + 2 + ], + "field_7263": [ + 1 + ], + "field_7264": [], + "field_7265": [], + "field_7266": [ + 2 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 864000.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "8", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 7, + "order": "7.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883104+00:00", + "updated_on": "2026-01-15T08:09:48.564170+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Design automation rules", + "field_7254": "Define triggers and workflows", + "field_7255": 3070, + "field_7256": 3075, + "field_7257": [ + 17 + ], + "field_7258": [ + 2 + ], + "field_7259": "2026-02-28", + "field_7260": "2026-03-10", + "field_7261": null, + "field_7262": [ + 3 + ], + "field_7263": [ + 1 + ], + "field_7264": [], + "field_7265": [], + "field_7266": [ + 2 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 950400.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "6", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 8, + "order": "8.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883117+00:00", + "updated_on": "2026-01-15T08:09:49.838290+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Implement workflows", + "field_7254": "Build automations in CRM", + "field_7255": 3070, + "field_7256": 3075, + "field_7257": [ + 14 + ], + "field_7258": [ + 14 + ], + "field_7259": "2026-03-11", + "field_7260": "2026-04-01", + "field_7261": null, + "field_7262": [ + 3 + ], + "field_7263": [ + 1 + ], + "field_7264": [ + 7 + ], + "field_7265": [], + "field_7266": [ + 2 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 1900800.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "12", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 9, + "order": "9.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883129+00:00", + "updated_on": "2026-01-15T08:09:50.861134+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Test automation", + "field_7254": "Validate automatic task creation", + "field_7255": 3070, + "field_7256": 3076, + "field_7257": [ + 17 + ], + "field_7258": [ + 2 + ], + "field_7259": "2026-04-02", + "field_7260": "2026-04-12", + "field_7261": null, + "field_7262": [ + 3 + ], + "field_7263": [ + 1 + ], + "field_7264": [ + 8 + ], + "field_7265": [], + "field_7266": [ + 2 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 950400.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "8", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 10, + "order": "10.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883142+00:00", + "updated_on": "2026-01-16T08:15:43.777383+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Prepare UAT scripts", + "field_7254": "Create business test scenarios", + "field_7255": 3070, + "field_7256": 3076, + "field_7257": [ + 14 + ], + "field_7258": [ + 2 + ], + "field_7259": "2026-04-05", + "field_7260": "2026-04-15", + "field_7261": "2026-01-16", + "field_7262": [ + 4 + ], + "field_7263": [ + 1 + ], + "field_7264": [], + "field_7265": [], + "field_7266": [ + 2 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 950400.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "6", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 11, + "order": "11.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883154+00:00", + "updated_on": "2026-01-15T08:09:55.822073+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Run UAT sessions", + "field_7254": "Users test the CRM", + "field_7255": 3070, + "field_7256": 3075, + "field_7257": [ + 14 + ], + "field_7258": [ + 2 + ], + "field_7259": "2026-04-16", + "field_7260": "2026-04-23", + "field_7261": null, + "field_7262": [ + 4 + ], + "field_7263": [ + 1 + ], + "field_7264": [ + 10 + ], + "field_7265": [], + "field_7266": [ + 2 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 691200.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "10", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 12, + "order": "12.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883167+00:00", + "updated_on": "2026-01-15T08:09:56.244095+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Fix UAT issues", + "field_7254": "Resolve reported defects", + "field_7255": 3070, + "field_7256": 3075, + "field_7257": [ + 17 + ], + "field_7258": [ + 17 + ], + "field_7259": "2026-04-24", + "field_7260": "2026-04-29", + "field_7261": null, + "field_7262": [ + 4 + ], + "field_7263": [ + 1 + ], + "field_7264": [ + 11 + ], + "field_7265": [], + "field_7266": [ + 2 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 518400.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "10", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 13, + "order": "13.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883179+00:00", + "updated_on": "2026-01-15T08:10:06.684165+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Prepare go-live checklist", + "field_7254": "Final readiness review", + "field_7255": 3070, + "field_7256": 3075, + "field_7257": [ + 17 + ], + "field_7258": [ + 2 + ], + "field_7259": "2026-05-05", + "field_7260": "2026-05-10", + "field_7261": null, + "field_7262": [ + 5 + ], + "field_7263": [ + 1 + ], + "field_7264": [], + "field_7265": [], + "field_7266": [ + 2 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 518400.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "6", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 14, + "order": "14.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883192+00:00", + "updated_on": "2026-01-16T08:00:59.904176+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Deploy CRM", + "field_7254": "Release system to production", + "field_7255": 3073, + "field_7256": 3074, + "field_7257": [ + 14 + ], + "field_7258": [ + 14 + ], + "field_7259": "2026-05-13", + "field_7260": "2026-05-16", + "field_7261": null, + "field_7262": [ + 5 + ], + "field_7263": [ + 1 + ], + "field_7264": [], + "field_7265": [], + "field_7266": [ + 2 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 345600.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "8", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 15, + "order": "15.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883204+00:00", + "updated_on": "2026-01-15T08:09:57.120550+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Train users", + "field_7254": "User onboarding sessions", + "field_7255": 3070, + "field_7256": 3076, + "field_7257": [ + 17 + ], + "field_7258": [ + 2 + ], + "field_7259": "2026-05-17", + "field_7260": "2026-05-28", + "field_7261": null, + "field_7262": [ + 5 + ], + "field_7263": [ + 1 + ], + "field_7264": [ + 14 + ], + "field_7265": [], + "field_7266": [ + 2 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 1036800.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "10", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 16, + "order": "16.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883217+00:00", + "updated_on": "2026-01-15T08:10:09.126467+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Interview system owners", + "field_7254": "Gather security info", + "field_7255": 3073, + "field_7256": 3075, + "field_7257": [ + 21 + ], + "field_7258": [ + 7 + ], + "field_7259": "2025-12-31", + "field_7260": "2026-01-07", + "field_7261": "2025-01-22", + "field_7262": [ + 6 + ], + "field_7263": [ + 2 + ], + "field_7264": [], + "field_7265": [ + 18, + 19, + 20 + ], + "field_7266": [ + 7 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 691200.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "6", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 17, + "order": "17.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883230+00:00", + "updated_on": "2026-01-15T08:10:09.632580+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Document security risks", + "field_7254": "Register ISO risks", + "field_7255": 3073, + "field_7256": 3075, + "field_7257": [ + 12 + ], + "field_7258": [ + 7 + ], + "field_7259": "2026-01-05", + "field_7260": "2026-01-16", + "field_7261": "2025-01-30", + "field_7262": [ + 6 + ], + "field_7263": [ + 2 + ], + "field_7264": [], + "field_7265": [ + 22, + 23, + 24 + ], + "field_7266": [ + 7 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 1036800.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "8", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 18, + "order": "18.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883242+00:00", + "updated_on": "2026-01-15T08:10:10.901367+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Approve risk register", + "field_7254": "Management sign-off", + "field_7255": 3073, + "field_7256": 3076, + "field_7257": [ + 1 + ], + "field_7258": [ + 7 + ], + "field_7259": "2026-01-17", + "field_7260": "2026-01-23", + "field_7261": "2025-01-31", + "field_7262": [ + 6 + ], + "field_7263": [ + 2 + ], + "field_7264": [ + 17 + ], + "field_7265": [], + "field_7266": [ + 7 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 604800.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "4", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 19, + "order": "19.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883254+00:00", + "updated_on": "2026-01-15T08:10:13.612662+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Define access controls", + "field_7254": "User and role model", + "field_7255": 3071, + "field_7256": 3075, + "field_7257": [ + 5 + ], + "field_7258": [ + 1 + ], + "field_7259": "2026-01-17", + "field_7260": "2026-01-31", + "field_7261": null, + "field_7262": [ + 7 + ], + "field_7263": [ + 2 + ], + "field_7264": [], + "field_7265": [ + 27, + 28 + ], + "field_7266": [ + 1 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 1296000.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "8", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 20, + "order": "20.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883267+00:00", + "updated_on": "2026-01-15T08:10:14.198875+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Define incident response", + "field_7254": "Security incident handling", + "field_7255": 3071, + "field_7256": 3075, + "field_7257": [ + 5 + ], + "field_7258": [ + 7 + ], + "field_7259": "2026-01-21", + "field_7260": "2026-02-13", + "field_7261": null, + "field_7262": [ + 7 + ], + "field_7263": [ + 2 + ], + "field_7264": [], + "field_7265": [ + 30, + 31, + 32 + ], + "field_7266": [ + 7 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 2073600.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "8", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 21, + "order": "21.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883279+00:00", + "updated_on": "2026-01-15T08:10:15.333122+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Define backup policy", + "field_7254": "Data protection rules", + "field_7255": 3070, + "field_7256": 3076, + "field_7257": [ + 5 + ], + "field_7258": [ + 1 + ], + "field_7259": "2026-01-26", + "field_7260": "2026-02-13", + "field_7261": null, + "field_7262": [ + 7 + ], + "field_7263": [ + 2 + ], + "field_7264": [], + "field_7265": [], + "field_7266": [ + 1 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 1641600.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "6", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 22, + "order": "22.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883291+00:00", + "updated_on": "2026-01-15T08:09:58.954987+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Implement MFA", + "field_7254": "Enable multi-factor authentication", + "field_7255": 3070, + "field_7256": 3075, + "field_7257": [ + 12 + ], + "field_7258": [ + 7 + ], + "field_7259": "2026-02-01", + "field_7260": "2026-02-27", + "field_7261": null, + "field_7262": [ + 8 + ], + "field_7263": [ + 2 + ], + "field_7264": [ + 19, + 20, + 21 + ], + "field_7265": [], + "field_7266": [ + 7 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 2332800.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "10", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 23, + "order": "23.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883303+00:00", + "updated_on": "2026-01-15T08:10:16.871540+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Configure SIEM", + "field_7254": "Set up security monitoring", + "field_7255": 3070, + "field_7256": 3075, + "field_7257": [ + 12 + ], + "field_7258": [ + 1 + ], + "field_7259": "2026-02-01", + "field_7260": "2026-03-04", + "field_7261": null, + "field_7262": [ + 8 + ], + "field_7263": [ + 2 + ], + "field_7264": [ + 19, + 20, + 21 + ], + "field_7265": [], + "field_7266": [ + 7 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 2764800.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "12", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 24, + "order": "24.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883316+00:00", + "updated_on": "2026-01-15T08:10:00.462031+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Apply hardening baseline", + "field_7254": "Secure servers and apps", + "field_7255": 3070, + "field_7256": 3075, + "field_7257": [ + 5 + ], + "field_7258": [ + 7 + ], + "field_7259": "2026-02-01", + "field_7260": "2026-02-27", + "field_7261": null, + "field_7262": [ + 8 + ], + "field_7263": [ + 2 + ], + "field_7264": [ + 19, + 20, + 21 + ], + "field_7265": [], + "field_7266": [ + 7 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 2332800.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "10", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 25, + "order": "25.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883328+00:00", + "updated_on": "2026-01-15T08:10:01.195813+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Prepare audit evidence", + "field_7254": "Collect policies and logs", + "field_7255": 3070, + "field_7256": 3075, + "field_7257": [ + 21 + ], + "field_7258": [ + 1 + ], + "field_7259": "2026-04-16", + "field_7260": "2026-05-05", + "field_7261": null, + "field_7262": [ + 9 + ], + "field_7263": [ + 2 + ], + "field_7264": [], + "field_7265": [], + "field_7266": [ + 1 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 1728000.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "10", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 26, + "order": "26.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883340+00:00", + "updated_on": "2026-01-15T08:10:18.797608+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Run internal audit", + "field_7254": "Test ISO compliance", + "field_7255": 3070, + "field_7256": 3075, + "field_7257": [ + 1 + ], + "field_7258": [ + 1 + ], + "field_7259": "2026-05-06", + "field_7260": "2026-05-22", + "field_7261": null, + "field_7262": [ + 9 + ], + "field_7263": [ + 2 + ], + "field_7264": [ + 25 + ], + "field_7265": [], + "field_7266": [ + 7 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 1468800.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "12", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 27, + "order": "27.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883352+00:00", + "updated_on": "2026-01-15T08:10:20.317460+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Close audit findings", + "field_7254": "Fix non-compliances", + "field_7255": 3070, + "field_7256": 3075, + "field_7257": [ + 12 + ], + "field_7258": [ + 1 + ], + "field_7259": "2026-05-23", + "field_7260": "2026-06-03", + "field_7261": null, + "field_7262": [ + 9 + ], + "field_7263": [ + 2 + ], + "field_7264": [ + 26 + ], + "field_7265": [], + "field_7266": [ + 7 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 1036800.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "10", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 28, + "order": "28.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883365+00:00", + "updated_on": "2026-01-15T08:10:21.677192+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Book certification auditor", + "field_7254": "Engage external auditor", + "field_7255": 3070, + "field_7256": 3076, + "field_7257": [ + 1 + ], + "field_7258": [ + 7 + ], + "field_7259": "2026-05-17", + "field_7260": "2026-05-21", + "field_7261": null, + "field_7262": [ + 10 + ], + "field_7263": [ + 2 + ], + "field_7264": [], + "field_7265": [], + "field_7266": [ + 7 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 432000.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "4", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 29, + "order": "29.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883377+00:00", + "updated_on": "2026-01-15T08:10:22.706223+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Support certification audit", + "field_7254": "Answer auditor questions", + "field_7255": 3070, + "field_7256": 3075, + "field_7257": [ + 21 + ], + "field_7258": [ + 1 + ], + "field_7259": "2026-05-31", + "field_7260": "2026-06-15", + "field_7261": null, + "field_7262": [ + 10 + ], + "field_7263": [ + 2 + ], + "field_7264": [], + "field_7265": [], + "field_7266": [ + 7 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 1382400.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "12", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 30, + "order": "30.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883389+00:00", + "updated_on": "2026-01-15T08:10:03.608715+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Resolve audit findings", + "field_7254": "Close final issues", + "field_7255": 3070, + "field_7256": 3075, + "field_7257": [ + 1 + ], + "field_7258": [ + 7 + ], + "field_7259": "2026-05-22", + "field_7260": "2026-06-01", + "field_7261": null, + "field_7262": [ + 10 + ], + "field_7263": [ + 2 + ], + "field_7264": [ + 28, + 29 + ], + "field_7265": [], + "field_7266": [ + 7 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 950400.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "10", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 31, + "order": "31.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883402+00:00", + "updated_on": "2026-01-16T04:22:04.351272+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Define target audience", + "field_7254": "Identify customer segments", + "field_7255": 3071, + "field_7256": 3076, + "field_7257": [ + 11 + ], + "field_7258": [ + 3 + ], + "field_7259": "2026-02-14", + "field_7260": "2026-02-16", + "field_7261": "2025-03-03", + "field_7262": [ + 11 + ], + "field_7263": [ + 3 + ], + "field_7264": [], + "field_7265": [ + 33, + 34, + 35 + ], + "field_7266": [ + 3 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 259200.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "4", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 32, + "order": "32.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883414+00:00", + "updated_on": "2026-01-20T10:42:18.643418+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Approve campaign budget", + "field_7254": "Finance sign-off", + "field_7255": 3072, + "field_7256": 3076, + "field_7257": [ + 3 + ], + "field_7258": [ + 3 + ], + "field_7259": "2026-02-15", + "field_7260": "2026-02-18", + "field_7261": "2025-03-05", + "field_7262": [ + 11 + ], + "field_7263": [ + 3 + ], + "field_7264": [], + "field_7265": [], + "field_7266": [ + 13 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 345600.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "4", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 33, + "order": "33.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883427+00:00", + "updated_on": "2026-01-20T10:42:19.173917+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Design banners", + "field_7254": "Create visual assets", + "field_7255": 3071, + "field_7256": 3075, + "field_7257": [ + 13 + ], + "field_7258": [ + 3 + ], + "field_7259": "2026-02-17", + "field_7260": "2026-03-01", + "field_7261": null, + "field_7262": [ + 12 + ], + "field_7263": [ + 3 + ], + "field_7264": [ + 32, + 31 + ], + "field_7265": [ + 38, + 39, + 40 + ], + "field_7266": [ + 3 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 1123200.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "8", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 34, + "order": "34.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883439+00:00", + "updated_on": "2026-01-16T05:30:13.897979+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Write ad copy", + "field_7254": "Marketing texts", + "field_7255": 3071, + "field_7256": 3075, + "field_7257": [ + 13 + ], + "field_7258": [ + 3 + ], + "field_7259": "2026-02-17", + "field_7260": "2026-03-01", + "field_7261": null, + "field_7262": [ + 12 + ], + "field_7263": [ + 3 + ], + "field_7264": [ + 31, + 32 + ], + "field_7265": [ + 41, + 42, + 43 + ], + "field_7266": [ + 3 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 1123200.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "8", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 35, + "order": "35.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883456+00:00", + "updated_on": "2026-01-15T08:10:27.271848+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Launch ads", + "field_7254": "Activate digital channels", + "field_7255": 3070, + "field_7256": 3075, + "field_7257": [ + 13 + ], + "field_7258": [ + 3 + ], + "field_7259": "2026-03-02", + "field_7260": "2026-03-02", + "field_7261": null, + "field_7262": [ + 13 + ], + "field_7263": [ + 3 + ], + "field_7264": [ + 33, + 34 + ], + "field_7265": [], + "field_7266": [ + 3 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 86400.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "4", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 36, + "order": "36.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883479+00:00", + "updated_on": "2026-01-15T08:10:28.817877+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Publish landing page", + "field_7254": "Website live", + "field_7255": 3070, + "field_7256": 3075, + "field_7257": [ + 13 + ], + "field_7258": [ + 13 + ], + "field_7259": "2026-03-03", + "field_7260": "2026-03-10", + "field_7261": null, + "field_7262": [ + 13 + ], + "field_7263": [ + 3 + ], + "field_7264": [ + 35 + ], + "field_7265": [], + "field_7266": [ + 3 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 691200.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "6", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 37, + "order": "37.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883501+00:00", + "updated_on": "2026-01-15T08:10:29.458046+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Collect performance data", + "field_7254": "Gather KPI data", + "field_7255": 3070, + "field_7256": 3076, + "field_7257": [ + 11 + ], + "field_7258": [ + 3 + ], + "field_7259": "2026-03-11", + "field_7260": "2026-03-26", + "field_7261": null, + "field_7262": [ + 14 + ], + "field_7263": [ + 3 + ], + "field_7264": [ + 36 + ], + "field_7265": [], + "field_7266": [ + 3 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 1382400.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "6", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + }, + { + "id": 38, + "order": "38.00000000000000000000", + "created_on": "2026-01-14T07:27:14.883538+00:00", + "updated_on": "2026-01-15T18:54:25.996586+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7253": "Prepare campaign report", + "field_7254": "Analyze results", + "field_7255": 3072, + "field_7256": 3076, + "field_7257": [ + 3 + ], + "field_7258": [ + 3 + ], + "field_7259": "2026-03-27", + "field_7260": "2026-04-06", + "field_7261": null, + "field_7262": [ + 14 + ], + "field_7263": [ + 3 + ], + "field_7264": [ + 37 + ], + "field_7265": [], + "field_7266": [ + 13 + ], + "field_7267": [], + "field_7323": null, + "field_7268": 950400.0, + "field_7269": [], + "field_7311": null, + "field_7312": null, + "field_7322": null, + "field_7321": null, + "field_7333": null, + "field_7335": null, + "field_7270": "8", + "field_7327": null, + "field_7330": null, + "field_7313": null, + "field_7271": null, + "field_7334": null + } + ], + "data_sync": null, + "field_rules": [ + { + "start_date_field_id": 7259, + "end_date_field_id": 7260, + "duration_field_id": 7268, + "dependency_linkrow_field_id": 7264, + "dependency_buffer": 0.0, + "dependency_buffer_type": "fixed", + "dependency_connection_type": "end-to-start", + "dependency_linkrow_role": "predecessors", + "include_weekends": true, + "id": 1, + "table_id": 756, + "type": "date_dependency", + "is_active": true, + "is_valid": true, + "error_text": null + } + ] + }, + { + "id": 757, + "name": "Task actions", + "order": 8, + "fields": [ + { + "id": 7272, + "type": "text", + "name": "Action", + "description": null, + "order": 2, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 7273, + "type": "link_row", + "name": "Task", + "description": null, + "order": 1, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 756, + "link_row_related_field_id": 7267, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 7274, + "type": "date", + "name": "Start time", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_format": "ISO", + "date_include_time": true, + "date_time_format": "24", + "date_show_tzinfo": false, + "date_force_timezone": null + }, + { + "id": 7275, + "type": "date", + "name": "End time", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_format": "ISO", + "date_include_time": true, + "date_time_format": "24", + "date_show_tzinfo": false, + "date_force_timezone": null + }, + { + "id": 7314, + "type": "formula", + "name": "Duration", + "description": null, + "order": 5, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": true, + "number_separator": "", + "array_formula_type": null, + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": "h:mm", + "number_prefix": "", + "formula": "field('End time') - field('Start time')", + "formula_type": "duration" + }, + { + "id": 7276, + "type": "long_text", + "name": "Notes", + "description": null, + "order": 6, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "long_text_enable_rich_text": false + }, + { + "id": 7277, + "type": "link_row", + "name": "Author", + "description": null, + "order": 7, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 751, + "link_row_related_field_id": 7230, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + } + ], + "views": [ + { + "id": 3370, + "type": "grid", + "name": "All actions", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [ + { + "id": 2489, + "field_id": 7274, + "order": "DESC" + } + ], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 28043, + "field_id": 7276, + "width": 200, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28044, + "field_id": 7273, + "width": 200, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28045, + "field_id": 7277, + "width": 200, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28046, + "field_id": 7272, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28047, + "field_id": 7274, + "width": 200, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28048, + "field_id": 7275, + "width": 200, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28049, + "field_id": 7314, + "width": 123, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 3371, + "type": "grid", + "name": "All actions grouped by task", + "order": 2, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [ + { + "id": 2490, + "field_id": 7274, + "order": "DESC" + } + ], + "group_bys": [ + { + "id": 341, + "field_id": 7273, + "order": "ASC" + } + ], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 28050, + "field_id": 7276, + "width": 200, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28051, + "field_id": 7273, + "width": 200, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28052, + "field_id": 7277, + "width": 200, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28053, + "field_id": 7272, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28054, + "field_id": 7274, + "width": 200, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28055, + "field_id": 7275, + "width": 200, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28056, + "field_id": 7314, + "width": 123, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 3372, + "type": "grid", + "name": "All actions grouped by author", + "order": 3, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [ + { + "id": 2491, + "field_id": 7274, + "order": "DESC" + } + ], + "group_bys": [ + { + "id": 342, + "field_id": 7277, + "order": "ASC" + } + ], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 28057, + "field_id": 7276, + "width": 200, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28058, + "field_id": 7273, + "width": 200, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28059, + "field_id": 7277, + "width": 200, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28060, + "field_id": 7272, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28061, + "field_id": 7274, + "width": 200, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28062, + "field_id": 7275, + "width": 200, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28063, + "field_id": 7314, + "width": 123, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 3373, + "type": "grid", + "name": "Completed actions", + "order": 4, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 1828, + "field_id": 7314, + "type": "not_empty", + "value": "", + "group": null + } + ], + "filter_groups": [], + "sortings": [ + { + "id": 2492, + "field_id": 7274, + "order": "DESC" + } + ], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 28064, + "field_id": 7276, + "width": 200, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28065, + "field_id": 7273, + "width": 200, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28066, + "field_id": 7277, + "width": 200, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28067, + "field_id": 7272, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28068, + "field_id": 7274, + "width": 200, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28069, + "field_id": 7275, + "width": 200, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28070, + "field_id": 7314, + "width": 123, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 3374, + "type": "grid", + "name": "Open actions", + "order": 5, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [ + { + "id": 1829, + "field_id": 7314, + "type": "empty", + "value": "", + "group": null + } + ], + "filter_groups": [], + "sortings": [ + { + "id": 2493, + "field_id": 7274, + "order": "DESC" + } + ], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 28071, + "field_id": 7276, + "width": 200, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28072, + "field_id": 7273, + "width": 200, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28073, + "field_id": 7277, + "width": 200, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28074, + "field_id": 7272, + "width": 200, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28075, + "field_id": 7274, + "width": 200, + "hidden": false, + "order": 5, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28076, + "field_id": 7275, + "width": 200, + "hidden": false, + "order": 6, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28077, + "field_id": 7314, + "width": 123, + "hidden": false, + "order": 7, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2026-01-14T08:24:59.258816+00:00", + "updated_on": "2026-01-15T14:34:57.420903+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7272": "Create initial CRM entity list", + "field_7273": [ + 1 + ], + "field_7274": "2025-02-01T09:00:00+00:00", + "field_7275": "2025-02-01T11:30:00+00:00", + "field_7314": null, + "field_7276": "Identified customers, contacts, deals, incidents and risks", + "field_7277": [ + 2 + ] + }, + { + "id": 2, + "order": "2.00000000000000000000", + "created_on": "2026-01-14T08:24:59.258849+00:00", + "updated_on": "2026-01-15T14:34:57.420951+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7272": "Define fields and attributes", + "field_7273": [ + 1 + ], + "field_7274": "2025-02-01T13:00:00+00:00", + "field_7275": "2025-02-01T16:00:00+00:00", + "field_7314": null, + "field_7276": "Added key fields for each entity", + "field_7277": [ + 2 + ] + }, + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2026-01-14T08:24:59.258859+00:00", + "updated_on": "2026-01-15T14:34:57.420962+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7272": "Review entities with IT Manager", + "field_7273": [ + 1 + ], + "field_7274": "2025-02-02T10:00:00+00:00", + "field_7275": "2025-02-02T11:00:00+00:00", + "field_7314": null, + "field_7276": "Validated entities with Lucas", + "field_7277": [ + 2 + ] + }, + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2026-01-14T08:24:59.258868+00:00", + "updated_on": "2026-01-15T14:34:57.420970+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7272": "Finalize CRM entities", + "field_7273": [ + 1 + ], + "field_7274": "2025-02-02T14:00:00+00:00", + "field_7275": "2025-02-02T15:30:00+00:00", + "field_7314": null, + "field_7276": "Prepared final entity list for approval", + "field_7277": [ + 2 + ] + }, + { + "id": 5, + "order": "5.00000000000000000000", + "created_on": "2026-01-14T08:24:59.258877+00:00", + "updated_on": "2026-01-15T14:34:57.420976+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7272": "Design entity relationships", + "field_7273": [ + 2 + ], + "field_7274": "2025-02-03T09:00:00+00:00", + "field_7275": "2025-02-03T12:00:00+00:00", + "field_7314": null, + "field_7276": "Defined customer, deal, incident and risk relationships", + "field_7277": [ + 2 + ] + }, + { + "id": 6, + "order": "6.00000000000000000000", + "created_on": "2026-01-14T08:24:59.258885+00:00", + "updated_on": "2026-01-15T14:34:57.420983+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7272": "Create relationship diagram", + "field_7273": [ + 2 + ], + "field_7274": "2025-02-03T13:00:00+00:00", + "field_7275": "2025-02-03T15:30:00+00:00", + "field_7314": null, + "field_7276": "Built ER diagram for CRM", + "field_7277": [ + 2 + ] + }, + { + "id": 7, + "order": "7.00000000000000000000", + "created_on": "2026-01-14T08:24:59.258894+00:00", + "updated_on": "2026-01-15T14:34:57.420989+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7272": "Test relationships with sample data", + "field_7273": [ + 2 + ], + "field_7274": "2025-02-04T09:00:00+00:00", + "field_7275": "2025-02-04T11:00:00+00:00", + "field_7314": null, + "field_7276": "Validated integrity with dummy records", + "field_7277": [ + 2 + ] + }, + { + "id": 8, + "order": "8.00000000000000000000", + "created_on": "2026-01-14T08:24:59.258902+00:00", + "updated_on": "2026-01-15T14:34:57.420995+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7272": "Review relationships with business", + "field_7273": [ + 2 + ], + "field_7274": "2025-02-04T14:00:00+00:00", + "field_7275": "2025-02-04T15:30:00+00:00", + "field_7314": null, + "field_7276": "Confirmed usability with Operations", + "field_7277": [ + 2 + ] + }, + { + "id": 9, + "order": "9.00000000000000000000", + "created_on": "2026-01-14T08:24:59.258911+00:00", + "updated_on": "2026-01-15T14:34:57.421001+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7272": "Prepare data model presentation", + "field_7273": [ + 3 + ], + "field_7274": "2025-02-10T09:00:00+00:00", + "field_7275": "2025-02-10T10:30:00+00:00", + "field_7314": null, + "field_7276": "Prepared slides and diagrams", + "field_7277": [ + 2 + ] + }, + { + "id": 10, + "order": "10.00000000000000000000", + "created_on": "2026-01-14T08:24:59.258919+00:00", + "updated_on": "2026-01-15T14:34:57.421008+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7272": "Run approval meeting", + "field_7273": [ + 3 + ], + "field_7274": "2025-02-10T11:00:00+00:00", + "field_7275": "2025-02-10T12:00:00+00:00", + "field_7314": null, + "field_7276": "Reviewed model with stakeholders", + "field_7277": [ + 2 + ] + }, + { + "id": 11, + "order": "11.00000000000000000000", + "created_on": "2026-01-14T08:24:59.258933+00:00", + "updated_on": "2026-01-15T14:34:57.421015+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7272": "Collect feedback and changes", + "field_7273": [ + 3 + ], + "field_7274": "2025-02-10T13:00:00+00:00", + "field_7275": "2025-02-10T14:30:00+00:00", + "field_7314": null, + "field_7276": "Minor changes requested", + "field_7277": [ + 2 + ] + }, + { + "id": 12, + "order": "12.00000000000000000000", + "created_on": "2026-01-14T08:24:59.258941+00:00", + "updated_on": "2026-01-16T04:28:38.796495+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7272": "Confirm final approval", + "field_7273": [ + 3 + ], + "field_7274": "2025-02-15T10:00:00+00:00", + "field_7275": "2025-02-15T14:30:00+00:00", + "field_7314": null, + "field_7276": "Formal approval received", + "field_7277": [ + 2 + ] + } + ], + "data_sync": null, + "field_rules": [] + }, + { + "id": 758, + "name": "Task messages", + "order": 9, + "fields": [ + { + "id": 7278, + "type": "text", + "name": "Message", + "description": null, + "order": 2, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 7279, + "type": "link_row", + "name": "Author", + "description": null, + "order": 1, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 751, + "link_row_related_field_id": 7227, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 7280, + "type": "created_on", + "name": "Created at", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "date_format": "ISO", + "date_include_time": true, + "date_time_format": "24", + "date_show_tzinfo": false, + "date_force_timezone": null + }, + { + "id": 7281, + "type": "link_row", + "name": "Task", + "description": null, + "order": 4, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 756, + "link_row_related_field_id": 7265, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 7306, + "type": "lookup", + "name": "Author picture", + "description": null, + "order": 5, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "number_suffix": "", + "error": null, + "date_include_time": null, + "date_time_format": null, + "date_force_timezone": null, + "nullable": true, + "number_separator": "", + "array_formula_type": "single_file", + "number_decimal_places": null, + "date_show_tzinfo": null, + "date_format": null, + "duration_format": null, + "number_prefix": "", + "through_field_id": 7279, + "through_field_name": "Author", + "target_field_id": 7220, + "target_field_name": "Picture" + } + ], + "views": [ + { + "id": 3375, + "type": "grid", + "name": "All messages", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [ + { + "id": 2494, + "field_id": 7280, + "order": "DESC" + } + ], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 28078, + "field_id": 7281, + "width": 200, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28079, + "field_id": 7279, + "width": 200, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28080, + "field_id": 7306, + "width": 147, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28081, + "field_id": 7278, + "width": 454, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28082, + "field_id": 7280, + "width": 200, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + }, + { + "id": 3376, + "type": "grid", + "name": "All messages grouped by task", + "order": 2, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [ + { + "id": 2495, + "field_id": 7280, + "order": "DESC" + } + ], + "group_bys": [ + { + "id": 343, + "field_id": 7281, + "order": "ASC" + } + ], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 28083, + "field_id": 7281, + "width": 200, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28084, + "field_id": 7279, + "width": 200, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28085, + "field_id": 7306, + "width": 147, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28086, + "field_id": 7278, + "width": 454, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28087, + "field_id": 7280, + "width": 200, + "hidden": false, + "order": 4, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020196+00:00", + "updated_on": "2026-01-14T08:12:20.353942+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "I\u2019ve finished the first version of the data model, please take a look", + "field_7279": [ + 2 + ], + "field_7280": null, + "field_7281": [ + 1 + ], + "field_7306": null + }, + { + "id": 3, + "order": "3.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020241+00:00", + "updated_on": "2026-01-14T08:12:28.132282+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Looks solid, especially the customer and incident links", + "field_7279": [ + 14 + ], + "field_7280": null, + "field_7281": [ + 1 + ], + "field_7306": null + }, + { + "id": 4, + "order": "4.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020248+00:00", + "updated_on": "2026-01-14T08:12:32.881693+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Great, I\u2019ll freeze the schema then", + "field_7279": [ + 2 + ], + "field_7280": null, + "field_7281": [ + 1 + ], + "field_7306": null + }, + { + "id": 6, + "order": "6.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020263+00:00", + "updated_on": "2026-01-14T08:19:31.007075+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Did you include the risk and asset tables?", + "field_7279": [ + 14 + ], + "field_7280": null, + "field_7281": [ + 2 + ], + "field_7306": null + }, + { + "id": 7, + "order": "7.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020270+00:00", + "updated_on": "2026-01-14T08:12:45.359069+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Yes, both are linked via external IDs", + "field_7279": [ + 2 + ], + "field_7280": null, + "field_7281": [ + 2 + ], + "field_7306": null + }, + { + "id": 8, + "order": "8.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020277+00:00", + "updated_on": "2026-01-14T08:19:31.878689+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Perfect, go ahead and finalize", + "field_7279": [ + 14 + ], + "field_7280": null, + "field_7281": [ + 2 + ], + "field_7306": null + }, + { + "id": 10, + "order": "10.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020291+00:00", + "updated_on": "2026-01-14T08:13:00.047814+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Customer module is up, but validation rules are still missing", + "field_7279": [ + 14 + ], + "field_7280": null, + "field_7281": [ + 4 + ], + "field_7306": null + }, + { + "id": 11, + "order": "11.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020298+00:00", + "updated_on": "2026-01-14T08:13:02.862022+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Can users already link incidents and risks?", + "field_7279": [ + 2 + ], + "field_7280": null, + "field_7281": [ + 4 + ], + "field_7306": null + }, + { + "id": 12, + "order": "12.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020305+00:00", + "updated_on": "2026-01-14T08:13:22.050957+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Yes, that part is working", + "field_7279": [ + 14 + ], + "field_7280": null, + "field_7281": [ + 4 + ], + "field_7306": null + }, + { + "id": 13, + "order": "13.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020312+00:00", + "updated_on": "2026-01-14T08:13:29.660800+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Good, we\u2019ll test the rest during UAT", + "field_7279": [ + 2 + ], + "field_7280": null, + "field_7281": [ + 4 + ], + "field_7306": null + }, + { + "id": 18, + "order": "18.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020347+00:00", + "updated_on": "2026-01-14T08:13:53.982663+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Did we cover Finance and HR as well?", + "field_7279": [ + 7 + ], + "field_7280": null, + "field_7281": [ + 16 + ], + "field_7306": null + }, + { + "id": 19, + "order": "19.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020354+00:00", + "updated_on": "2026-01-14T08:13:51.881552+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Yes, both confirmed their systems", + "field_7279": [ + 21 + ], + "field_7280": null, + "field_7281": [ + 16 + ], + "field_7306": null + }, + { + "id": 20, + "order": "20.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020361+00:00", + "updated_on": "2026-01-14T08:13:54.934075+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Great, thanks", + "field_7279": [ + 7 + ], + "field_7280": null, + "field_7281": [ + 16 + ], + "field_7306": null + }, + { + "id": 22, + "order": "22.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020390+00:00", + "updated_on": "2026-01-14T08:14:06.535510+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Any critical ones we should flag now?", + "field_7279": [ + 7 + ], + "field_7280": null, + "field_7281": [ + 17 + ], + "field_7306": null + }, + { + "id": 23, + "order": "23.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020397+00:00", + "updated_on": "2026-01-14T08:14:01.576603+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Two around access control and backups", + "field_7279": [ + 12 + ], + "field_7280": null, + "field_7281": [ + 17 + ], + "field_7306": null + }, + { + "id": 24, + "order": "24.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020404+00:00", + "updated_on": "2026-01-14T08:14:05.803274+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Let\u2019s make sure those get top priority", + "field_7279": [ + 7 + ], + "field_7280": null, + "field_7281": [ + 17 + ], + "field_7306": null + }, + { + "id": 27, + "order": "27.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020427+00:00", + "updated_on": "2026-01-14T08:14:13.342400+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Can you align this with the CRM roles?", + "field_7279": [ + 1 + ], + "field_7280": null, + "field_7281": [ + 19 + ], + "field_7306": null + }, + { + "id": 28, + "order": "28.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020435+00:00", + "updated_on": "2026-01-14T08:20:23.081000+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Yes, I\u2019ll sync with the CRM team", + "field_7279": [ + 5 + ], + "field_7280": null, + "field_7281": [ + 19 + ], + "field_7306": null + }, + { + "id": 30, + "order": "30.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020449+00:00", + "updated_on": "2026-01-14T08:20:33.654012+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Does it include escalation to executives?", + "field_7279": [ + 7 + ], + "field_7280": null, + "field_7281": [ + 20 + ], + "field_7306": null + }, + { + "id": 31, + "order": "31.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020456+00:00", + "updated_on": "2026-01-14T08:20:37.654978+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Yes, critical incidents will trigger alerts", + "field_7279": [ + 5 + ], + "field_7280": null, + "field_7281": [ + 20 + ], + "field_7306": null + }, + { + "id": 32, + "order": "32.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020463+00:00", + "updated_on": "2026-01-14T08:20:35.153224+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Perfect, that\u2019s required for ISO", + "field_7279": [ + 7 + ], + "field_7280": null, + "field_7281": [ + 20 + ], + "field_7306": null + }, + { + "id": 33, + "order": "33.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020470+00:00", + "updated_on": "2026-01-14T08:20:45.874709+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Target segments defined based on last year\u2019s data", + "field_7279": [ + 11 + ], + "field_7280": null, + "field_7281": [ + 31 + ], + "field_7306": null + }, + { + "id": 34, + "order": "34.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020477+00:00", + "updated_on": "2026-01-14T08:20:49.505640+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Did you include the high-margin customers?", + "field_7279": [ + 3 + ], + "field_7280": null, + "field_7281": [ + 31 + ], + "field_7306": null + }, + { + "id": 35, + "order": "35.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020484+00:00", + "updated_on": "2026-01-14T08:20:47.763465+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Yes, they are a key segment", + "field_7279": [ + 11 + ], + "field_7280": null, + "field_7281": [ + 31 + ], + "field_7306": null + }, + { + "id": 38, + "order": "38.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020508+00:00", + "updated_on": "2026-01-14T08:20:59.046899+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Initial banner concepts uploaded", + "field_7279": [ + 13 + ], + "field_7280": null, + "field_7281": [ + 33 + ], + "field_7306": null + }, + { + "id": 39, + "order": "39.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020516+00:00", + "updated_on": "2026-01-14T08:21:00.543655+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Can you adjust the colors to match brand guidelines?", + "field_7279": [ + 3 + ], + "field_7280": null, + "field_7281": [ + 33 + ], + "field_7306": null + }, + { + "id": 40, + "order": "40.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020523+00:00", + "updated_on": "2026-01-14T08:21:03.579240+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Sure, I\u2019ll update them today", + "field_7279": [ + 13 + ], + "field_7280": null, + "field_7281": [ + 33 + ], + "field_7306": null + }, + { + "id": 41, + "order": "41.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020530+00:00", + "updated_on": "2026-01-14T08:21:07.874617+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "First draft of ad copy ready", + "field_7279": [ + 13 + ], + "field_7280": null, + "field_7281": [ + 34 + ], + "field_7306": null + }, + { + "id": 42, + "order": "42.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020537+00:00", + "updated_on": "2026-01-14T08:21:15.606689+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "We\u2019ll need legal to review before launch", + "field_7279": [ + 3 + ], + "field_7280": null, + "field_7281": [ + 34 + ], + "field_7306": null + }, + { + "id": 43, + "order": "43.00000000000000000000", + "created_on": "2026-01-14T08:04:38.020544+00:00", + "updated_on": "2026-01-14T08:21:13.346554+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Understood, sending it to them now", + "field_7279": [ + 13 + ], + "field_7280": null, + "field_7281": [ + 34 + ], + "field_7306": null + }, + { + "id": 56, + "order": "44.00000000000000000000", + "created_on": "2026-02-19T14:02:52.452178+00:00", + "updated_on": "2026-02-19T14:02:52.452178+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7278": "Testing", + "field_7279": [ + 2 + ], + "field_7280": null, + "field_7281": [ + 1 + ], + "field_7306": null + } + ], + "data_sync": null, + "field_rules": [] + }, + { + "id": 759, + "name": "Files", + "order": 10, + "fields": [ + { + "id": 7282, + "type": "text", + "name": "Name", + "description": null, + "order": 0, + "primary": true, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "text_default": "" + }, + { + "id": 7283, + "type": "link_row", + "name": "Task", + "description": null, + "order": 1, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 756, + "link_row_related_field_id": 7269, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + }, + { + "id": 7284, + "type": "file", + "name": "File", + "description": null, + "order": 2, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [] + }, + { + "id": 7285, + "type": "link_row", + "name": "Project", + "description": null, + "order": 3, + "primary": false, + "read_only": false, + "db_index": false, + "immutable_type": false, + "immutable_properties": false, + "field_constraints": [], + "link_row_table_id": 753, + "link_row_related_field_id": 7245, + "link_row_limit_selection_view_id": null, + "has_related_field": true, + "link_row_multiple_relationships": false + } + ], + "views": [ + { + "id": 3377, + "type": "grid", + "name": "All files", + "order": 1, + "ownership_type": "collaborative", + "owned_by": "frederik@baserow.io", + "filter_type": "AND", + "filters_disabled": false, + "filters": [], + "filter_groups": [], + "sortings": [], + "group_bys": [], + "decorations": [], + "public": false, + "row_identifier_type": "id", + "row_height_size": "small", + "field_options": [ + { + "id": 28088, + "field_id": 7282, + "width": 230, + "hidden": false, + "order": 0, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28089, + "field_id": 7283, + "width": 202, + "hidden": false, + "order": 1, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28090, + "field_id": 7285, + "width": 200, + "hidden": false, + "order": 2, + "aggregation_type": "", + "aggregation_raw_type": "" + }, + { + "id": 28091, + "field_id": 7284, + "width": 100, + "hidden": false, + "order": 3, + "aggregation_type": "", + "aggregation_raw_type": "" + } + ] + } + ], + "rows": [ + { + "id": 1, + "order": "1.00000000000000000000", + "created_on": "2026-01-14T08:54:26.358752+00:00", + "updated_on": "2026-01-20T08:22:01.940504+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7282": "The contract", + "field_7283": [ + 1 + ], + "field_7284": [ + { + "name": "pDq9MpvWQf20xADf2EnHWiue19XLMWU9_e7fa567aac5fdffb5569ad7301a186889981b3f504d39250a6aebbce0ac452d6.pdf", + "visible_name": "contract.pdf", + "original_name": "pDq9MpvWQf20xADf2EnHWiue19XLMWU9_e7fa567aac5fdffb5569ad7301a186889981b3f504d39250a6aebbce0ac452d6.pdf", + "size": 102651 + } + ], + "field_7285": [ + 1 + ] + }, + { + "id": 2, + "order": "2.00000000000000000000", + "created_on": "2026-01-20T08:25:44.905782+00:00", + "updated_on": "2026-02-19T09:24:07.655062+00:00", + "created_by": "frederik@baserow.io", + "last_modified_by": "frederik@baserow.io", + "field_7282": "Template file", + "field_7283": [], + "field_7284": [ + { + "name": "pDq9MpvWQf20xADf2EnHWiue19XLMWU9_e7fa567aac5fdffb5569ad7301a186889981b3f504d39250a6aebbce0ac452d6.pdf", + "visible_name": "contract.pdf", + "original_name": "pDq9MpvWQf20xADf2EnHWiue19XLMWU9_e7fa567aac5fdffb5569ad7301a186889981b3f504d39250a6aebbce0ac452d6.pdf", + "size": 102651 + } + ], + "field_7285": [ + 1 + ] + } + ], + "data_sync": null, + "field_rules": [] + } + ] + }, + { + "pages": [ + { + "id": 335, + "name": "__shared__", + "order": 1, + "path": "__shared__", + "path_params": [], + "query_params": [], + "shared": true, + "elements": [ + { + "id": 4658, + "order": "0.50000000000000000000", + "type": "text", + "parent_element_id": 4657, + "place_in_container": "1", + "css_classes": "", + "visibility": "logged-in", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 18, + "body_font_weight": "semi-bold", + "body_text_alignment": "right" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 2, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "datetime_format(today(),'dddd D MMMM YYYY')" + }, + "format": "plain" + }, + { + "id": 4656, + "order": "1.00000000000000000000", + "type": "header", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "share_type": "all", + "pages": [] + }, + { + "id": 4657, + "order": "1.00000000000000000000", + "type": "column", + "parent_element_id": 4656, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 20, + "alignment": "center" + }, + { + "id": 4659, + "order": "1.00000000000000000000", + "type": "image", + "parent_element_id": 4657, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "image_source_type": "upload", + "image_file_id": { + "name": "Meu4jG197O861BHrTmkipkbWg6sXC9yD_2ed17003523b690f2eb8a2308359f079ea244206d26ebf1eec940c5569af58d1.png", + "original_name": "my-company-logo.png" + }, + "image_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "alt_text": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 4660, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 4657, + "place_in_container": "1", + "css_classes": "", + "visibility": "logged-in", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_text_alignment": "right" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 2, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Signed in as ',get('user.username'))" + }, + "format": "plain" + }, + { + "id": 4661, + "order": "2.00000000000000000000", + "type": "menu", + "parent_element_id": 4656, + "place_in_container": null, + "css_classes": "", + "visibility": "logged-in", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "menu": { + "button_font_size": 10, + "button_border_size": 2, + "button_background_color": "transparent", + "button_active_text_color": "ElMaZ", + "button_hover_border_color": "primary", + "link_default_text_decoration": [ + false, + false, + false, + false + ], + "button_hover_background_color": "ElMaZ", + "button_active_background_color": "secondary" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "orientation": "horizontal", + "alignment": "left", + "menu_items": [ + { + "id": 95, + "variant": "link", + "type": "link", + "menu_item_order": 0, + "uid": "4eb0bc6f-f0c7-4f50-9d39-d56cdca1619a", + "name": "Home", + "navigation_type": "page", + "navigate_to_page_id": 337, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 96, + "variant": "link", + "type": "separator", + "menu_item_order": 1, + "uid": "eddddcc7-97a2-477b-92f8-b1aef088456f", + "name": "Page", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 97, + "variant": "link", + "type": "link", + "menu_item_order": 2, + "uid": "bda412b9-7b18-4f5f-a61c-129bd824a430", + "name": "Projects", + "navigation_type": "page", + "navigate_to_page_id": 350, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 98, + "variant": "link", + "type": "separator", + "menu_item_order": 3, + "uid": "aa333dcd-378f-4b70-88fe-cde9da2314ac", + "name": "Page 2", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 99, + "variant": "link", + "type": "spacer", + "menu_item_order": 4, + "uid": "a6ad26a6-b99b-4ef5-9727-d4e05d0ac1cc", + "name": "Page 6", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 100, + "variant": "link", + "type": "button", + "menu_item_order": 5, + "uid": "37a3df59-942e-48a9-8f8e-18542ed7f2d3", + "name": "LOGOUT", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + } + ] + } + ], + "data_sources": [ + { + "id": 586, + "name": "Users", + "order": "1.00000000000000000000", + "service": { + "id": 745, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 751, + "view_id": null, + "sortings": [ + { + "field_id": 7217, + "order_by": "ASC" + } + ], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "default_result_count": 20 + } + } + ], + "workflow_actions": [ + { + "id": 469, + "type": "logout", + "order": 1, + "page_id": 335, + "element_id": 4661, + "event": "37a3df59-942e-48a9-8f8e-18542ed7f2d3_click" + } + ], + "visibility": "all", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 336, + "name": "Login", + "order": 1, + "path": "/login", + "path_params": [], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 4662, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "heading_1_text_alignment": "center" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 50, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Login'" + }, + "level": 1 + }, + { + "id": 4663, + "order": "2.00000000000000000000", + "type": "auth_form", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "login_button": { + "button_alignment": "center" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 50, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 50, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 50, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 16, + "style_border_radius": 16, + "style_background": "color", + "style_background_color": "ElMaZ", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "small", + "style_width_child": "normal", + "user_source_id": 34, + "login_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Login'" + } + } + ], + "data_sources": [ + { + "id": 587, + "name": "Tasks", + "order": "1.00000000000000000000", + "service": { + "id": 746, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 756, + "view_id": 3357, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "default_result_count": 20 + } + } + ], + "workflow_actions": [], + "visibility": "all", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 337, + "name": "Home", + "order": 2, + "path": "/", + "path_params": [], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 4664, + "order": "0.33333333333333331483", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.593.0.id') > 0" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "warning", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 0, + "alignment": "center" + }, + { + "id": 4671, + "order": "0.40000000000000002220", + "type": "link", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 30, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 343, + "page_parameters": [], + "query_parameters": [ + { + "name": "project", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "name": "milestone", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'+ Create new task'" + }, + "variant": "button" + }, + { + "id": 4665, + "order": "0.50000000000000000000", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 50, + "alignment": "top" + }, + { + "id": 4672, + "order": "0.50000000000000000000", + "type": "link", + "parent_element_id": 4664, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "link": { + "link_font_size": 16, + "link_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 338, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.593.0.field_7273.0.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Task: ',get('data_source.593.0.field_7273.0.value'))" + }, + "variant": "link" + }, + { + "id": 4682, + "order": "0.50000000000000000000", + "type": "repeat", + "parent_element_id": 4670, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 592, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "orientation": "horizontal", + "items_per_row": { + "tablet": 1, + "desktop": 4, + "smartphone": 1 + }, + "horizontal_gap": 20, + "vertical_gap": 20 + }, + { + "id": 4673, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": 4665, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Assigned tasks'" + }, + "level": 2 + }, + { + "id": 4674, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": 4665, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Tasks to review'" + }, + "level": 2 + }, + { + "id": 4675, + "order": "1.00000000000000000000", + "type": "table", + "parent_element_id": 4666, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 10, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 10, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 588, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "81752ad6-f2cb-4c7a-a182-897f7635614e", + "name": "Icons", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7321'),' ',get('current_record.field_7322'),' ',get('current_record.field_7330'))" + } + } + }, + { + "uid": "a4068aa1-696a-463a-90bc-5f2f9e538a1b", + "name": "Name", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 338, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7253')" + }, + "variant": "link" + } + }, + { + "uid": "6fa51f3f-ff9a-47d6-b1b9-42a939c6b297", + "name": "Days to go", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7311')" + } + } + }, + { + "uid": "04ebe79b-be09-43cd-8036-bf7f32dd4fc9", + "name": "", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 340, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "'Actions'" + }, + "variant": "button" + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + }, + { + "id": 4676, + "order": "1.00000000000000000000", + "type": "table", + "parent_element_id": 4667, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 589, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "86e4df13-9dba-4684-ae7a-f534f2b8fbb6", + "name": "Icon", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7321'),' ',get('current_record.field_7322'),' ',get('current_record.field_7330'))" + } + } + }, + { + "uid": "2e2dcd00-13e2-4a9d-a186-85c1d622a1bb", + "name": "Name", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 338, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7253')" + }, + "variant": "link" + } + }, + { + "uid": "57b602e0-232b-4c5e-8702-75f02c2cea88", + "name": "Priority", + "type": "tags", + "styles": {}, + "config": { + "values": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7256.value')" + }, + "colors_is_formula": true, + "colors": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7256.color')" + } + } + }, + { + "uid": "132bb8f4-d6cb-4567-b128-c9b7ea15a95e", + "name": "Days to go", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7311')" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + }, + { + "id": 4677, + "order": "1.00000000000000000000", + "type": "table", + "parent_element_id": 4669, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 590, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "fcec5e61-595b-4a37-b646-ee4d755298c0", + "name": "Name", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 344, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7236')" + }, + "variant": "link" + } + }, + { + "uid": "b51040be-8494-4cdd-8c13-0c178e710018", + "name": "Due date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7239')" + } + } + }, + { + "uid": "748d7a4d-b368-486b-bec4-28d67b3f59c4", + "name": "progress", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7315')" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + }, + { + "id": 4678, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 4664, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 4, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "concat('You have an action running since ',datetime_format(get('data_source.593.0.field_7274'),'YYYY-MM-DD HH:mm'),': ',get('data_source.593.0.field_7272'))" + }, + "format": "plain" + }, + { + "id": 4679, + "order": "1.00000000000000000000", + "type": "button", + "parent_element_id": 4664, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_alignment": "right", + "button_text_color": "ElMaZ", + "button_background_color": "error", + "button_hover_text_color": "ElMaZ", + "button_active_text_color": "ElMaZ", + "button_hover_background_color": "#b61e0a", + "button_active_background_color": "error" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 4, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Stop action'" + } + }, + { + "id": 4683, + "order": "1.00000000000000000000", + "type": "image", + "parent_element_id": 4682, + "place_in_container": null, + "css_classes": "round-image", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "image": { + "image_alignment": "center", + "image_constraint": "full-width", + "image_border_radius": 8 + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "image_source_type": "url", + "image_file_id": null, + "image_url": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7220.0.url')" + }, + "alt_text": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 4680, + "order": "1.50000000000000000000", + "type": "heading", + "parent_element_id": 4668, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'My active projects'" + }, + "level": 2 + }, + { + "id": 4681, + "order": "1.50000000000000000000", + "type": "heading", + "parent_element_id": 4668, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('My team: ',get('data_source.591.0.field_7232'))" + }, + "level": 2 + }, + { + "id": 4666, + "order": "2.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4665, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "ElMaZ", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4667, + "order": "2.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4665, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4668, + "order": "2.00000000000000000000", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 50, + "alignment": "top" + }, + { + "id": 4684, + "order": "2.00000000000000000000", + "type": "link", + "parent_element_id": 4682, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "link": { + "link_text_alignment": "center" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 352, + "page_parameters": [ + { + "name": "user_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7217')" + }, + "variant": "link" + }, + { + "id": 4669, + "order": "3.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4668, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "ElMaZ", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4670, + "order": "3.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4668, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + } + ], + "data_sources": [ + { + "id": 588, + "name": "My assigned tasks", + "order": "1.00000000000000000000", + "service": { + "id": 747, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 756, + "view_id": 3357, + "sortings": [ + { + "field_id": 7311, + "order_by": "ASC" + } + ], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7257, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('user.id')" + }, + "value_is_formula": true + }, + { + "field_id": 7255, + "type": "single_select_not_equal", + "value": { + "mode": "raw", + "version": "0.1", + "formula": "3073" + }, + "value_is_formula": false + }, + { + "field_id": 7255, + "type": "single_select_not_equal", + "value": { + "mode": "raw", + "version": "0.1", + "formula": "3072" + }, + "value_is_formula": false + } + ], + "default_result_count": 20 + } + }, + { + "id": 589, + "name": "My tasks to review", + "order": "2.00000000000000000000", + "service": { + "id": 748, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 756, + "view_id": 3357, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7266, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('user.id')" + }, + "value_is_formula": true + }, + { + "field_id": 7255, + "type": "single_select_equal", + "value": { + "mode": "raw", + "version": "0.1", + "formula": "3072" + }, + "value_is_formula": false + } + ], + "default_result_count": 20 + } + }, + { + "id": 590, + "name": "My projects", + "order": "3.00000000000000000000", + "service": { + "id": 749, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 753, + "view_id": 3351, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7287, + "type": "has_value_equal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('user.username')" + }, + "value_is_formula": true + }, + { + "field_id": 7324, + "type": "equal", + "value": { + "mode": "raw", + "version": "0.1", + "formula": "Active" + }, + "value_is_formula": false + } + ], + "default_result_count": 20 + } + }, + { + "id": 591, + "name": "My team", + "order": "4.00000000000000000000", + "service": { + "id": 750, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 752, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7234, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('user.id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 592, + "name": "My team members", + "order": "5.00000000000000000000", + "service": { + "id": 751, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 751, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7221, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.591.0.id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 593, + "name": "Open action", + "order": "7.00000000000000000000", + "service": { + "id": 752, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 757, + "view_id": 3374, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7277, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('user.id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + } + ], + "workflow_actions": [ + { + "id": 470, + "type": "update_row", + "order": 1, + "page_id": 337, + "element_id": 4679, + "event": "click", + "service": { + "id": 798, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 757, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.593.0.id')" + }, + "field_mappings": [ + { + "field_id": 7275, + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "now()" + }, + "enabled": true + } + ] + } + }, + { + "id": 471, + "type": "refresh_data_source", + "order": 2, + "page_id": 337, + "element_id": 4679, + "event": "click", + "data_source_id": 593 + } + ], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 338, + "name": "Task details", + "order": 3, + "path": "/task-details/:task_id", + "path_params": [ + { + "name": "task_id", + "type": "numeric" + } + ], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 4688, + "order": "0.50000000000000000000", + "type": "text", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.594.field_7255.value') = \"Done\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "FQ0Fi", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Status: ',get('data_source.594.field_7255.value'))" + }, + "format": "plain" + }, + { + "id": 4685, + "order": "0.78571428571428569843", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.594.field_7255.value') = \"Ready for review\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "EAIyi", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 20, + "alignment": "center" + }, + { + "id": 4686, + "order": "0.78947368421052632748", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.594.field_7255.value') = \"In progress\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "rOEoY", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 20, + "alignment": "center" + }, + { + "id": 4689, + "order": "0.80000000000000004441", + "type": "text", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.594.field_7255.value') = \"To do\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "36yGj", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Status: ',get('data_source.594.field_7255.value'),'. Add a first action to start with the task.')" + }, + "format": "plain" + }, + { + "id": 4690, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.594.field_7333')" + }, + "level": 2 + }, + { + "id": 4691, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 4687, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Project'" + }, + "format": "plain" + }, + { + "id": 4692, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 4685, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Status: ',get('data_source.594.field_7255.value'),'. Mark the task as done once it is reviewed')" + }, + "format": "plain" + }, + { + "id": 4693, + "order": "1.00000000000000000000", + "type": "button", + "parent_element_id": 4685, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('user.id') = get('data_source.594.field_7266.0.id')" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_alignment": "right", + "button_text_color": "V6EVv", + "button_background_color": "FQ0Fi", + "button_hover_background_color": "FQ0Fi", + "button_active_background_color": "FQ0Fi" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Task is completed'" + } + }, + { + "id": 4708, + "order": "1.00000000000000000000", + "type": "form_container", + "parent_element_id": 4687, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "submit_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Update task'" + }, + "reset_initial_values_post_submission": false + }, + { + "id": 4709, + "order": "1.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4687, + "place_in_container": "2", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4712, + "order": "1.00000000000000000000", + "type": "input_text", + "parent_element_id": 4708, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Name'" + }, + "required": true, + "validation_type": "any", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.594.field_7253')" + }, + "is_multiline": false, + "rows": 3, + "input_type": "text" + }, + { + "id": 4720, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": 4709, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 10, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Depends on tasks'" + }, + "level": 4 + }, + { + "id": 4721, + "order": "1.00000000000000000000", + "type": "link", + "parent_element_id": 4710, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 338, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.value')" + }, + "variant": "link" + }, + { + "id": 4694, + "order": "1.50000000000000000000", + "type": "menu", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "menu": { + "button_font_size": 14, + "button_border_size": 3, + "button_font_weight": "medium", + "button_border_color": "primary", + "button_background_color": "border", + "button_hover_text_color": "ElMaZ", + "button_active_text_color": "ElMaZ", + "button_hover_border_color": "primary", + "button_active_border_color": "primary", + "button_hover_background_color": "V6EVv", + "button_active_background_color": "secondary" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffff80", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "orientation": "horizontal", + "alignment": "center", + "menu_items": [ + { + "id": 101, + "variant": "button", + "type": "link", + "menu_item_order": 0, + "uid": "505e8509-7506-4ad0-94f4-c4736b534e89", + "name": "Overview", + "navigation_type": "page", + "navigate_to_page_id": 338, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 102, + "variant": "link", + "type": "separator", + "menu_item_order": 1, + "uid": "531fe41c-a7b4-4a02-b600-656a0847cf35", + "name": "Page", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 103, + "variant": "button", + "type": "link", + "menu_item_order": 2, + "uid": "9044f5fd-7827-4e7b-8027-28acafee4c97", + "name": "Dependencies", + "navigation_type": "page", + "navigate_to_page_id": 339, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [ + { + "name": "milestone_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.594.field_7262.0.id')" + } + }, + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.594.field_7263.0.id')" + } + } + ], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 104, + "variant": "link", + "type": "separator", + "menu_item_order": 3, + "uid": "308c5781-5cc4-4219-a7ab-42a4240daed5", + "name": "Page 4", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 105, + "variant": "button", + "type": "link", + "menu_item_order": 4, + "uid": "ed30e026-bc6e-4c93-95a9-ca2d9409a386", + "name": "Actions", + "navigation_type": "page", + "navigate_to_page_id": 340, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'http://pm.localhost:3000/task-details/28#actions'" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 106, + "variant": "link", + "type": "separator", + "menu_item_order": 5, + "uid": "17a86d6b-176c-4e1b-830f-43bf659a9ccd", + "name": "Page 1", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 107, + "variant": "button", + "type": "link", + "menu_item_order": 6, + "uid": "75bcad8a-fc5f-4362-a0c3-22e1a002571c", + "name": "Messages", + "navigation_type": "page", + "navigate_to_page_id": 341, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'#messages'" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 108, + "variant": "link", + "type": "separator", + "menu_item_order": 7, + "uid": "bce8e6bd-bc07-4ef6-82cc-fdb5e6d5f3ed", + "name": "Page 3", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 109, + "variant": "button", + "type": "link", + "menu_item_order": 8, + "uid": "fc47d5f4-9113-4829-974d-34491fafe0e1", + "name": "Files", + "navigation_type": "page", + "navigate_to_page_id": 342, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'#files'" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + } + ] + }, + { + "id": 4695, + "order": "1.50000000000000000000", + "type": "link", + "parent_element_id": 4687, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 4, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 14, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 344, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.594.field_7263.0.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.594.field_7263.0.value')" + }, + "variant": "link" + }, + { + "id": 4687, + "order": "2.00000000000000000000", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 50, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 50, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 3, + "column_gap": 60, + "alignment": "top" + }, + { + "id": 4696, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 4686, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Status: ',get('data_source.594.field_7255.value'),'. Mark the task as ready for review once it is completed')" + }, + "format": "plain" + }, + { + "id": 4697, + "order": "2.00000000000000000000", + "type": "button", + "parent_element_id": 4686, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('user.id') = get('data_source.594.field_7257.0.id')" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_alignment": "right", + "button_text_color": "V6EVv", + "button_background_color": "EAIyi", + "button_hover_background_color": "EAIyi", + "button_active_background_color": "EAIyi" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Ready for review'" + } + }, + { + "id": 4710, + "order": "2.00000000000000000000", + "type": "repeat", + "parent_element_id": 4709, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 594, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": "field_7335", + "property_options": [], + "orientation": "vertical", + "items_per_row": { + "tablet": 2, + "desktop": 2, + "smartphone": 2 + }, + "horizontal_gap": 0, + "vertical_gap": 0 + }, + { + "id": 4713, + "order": "2.00000000000000000000", + "type": "input_text", + "parent_element_id": 4708, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Description'" + }, + "required": true, + "validation_type": "any", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.594.field_7254')" + }, + "is_multiline": false, + "rows": 3, + "input_type": "text" + }, + { + "id": 4722, + "order": "2.00000000000000000000", + "type": "link", + "parent_element_id": 4711, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 338, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7333')" + }, + "variant": "link" + }, + { + "id": 4698, + "order": "3.00000000000000000000", + "type": "text", + "parent_element_id": 4687, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Milestone'" + }, + "format": "plain" + }, + { + "id": 4714, + "order": "3.00000000000000000000", + "type": "choice", + "parent_element_id": 4708, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Priority'" + }, + "required": true, + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.594.field_7256.id')" + }, + "options": [], + "multiple": false, + "show_as_dropdown": true, + "option_type": "formulas", + "formula_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source_context.594.field_7256.*.id')" + }, + "formula_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source_context.594.field_7256.*.value')" + } + }, + { + "id": 4723, + "order": "3.00000000000000000000", + "type": "heading", + "parent_element_id": 4709, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 10, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Is blocking tasks'" + }, + "level": 4 + }, + { + "id": 4699, + "order": "3.50000000000000000000", + "type": "link", + "parent_element_id": 4687, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 4, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 14, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 345, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.594.field_7263.0.id')" + } + } + ], + "query_parameters": [ + { + "name": "milestone_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.594.field_7262.0.id')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.594.field_7334.0.value')" + }, + "variant": "link" + }, + { + "id": 4715, + "order": "3.50000000000000000000", + "type": "datetime_picker", + "parent_element_id": 4708, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Start date'" + }, + "required": true, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.594.field_7259')" + }, + "date_format": "ISO", + "include_time": false, + "time_format": "24" + }, + { + "id": 4716, + "order": "3.66666666666666651864", + "type": "datetime_picker", + "parent_element_id": 4708, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Due date'" + }, + "required": true, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.594.field_7260')" + }, + "date_format": "ISO", + "include_time": false, + "time_format": "24" + }, + { + "id": 4711, + "order": "4.00000000000000000000", + "type": "repeat", + "parent_element_id": 4709, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.594.field_7255.value') != \"Done\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 595, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "orientation": "vertical", + "items_per_row": { + "tablet": 2, + "desktop": 2, + "smartphone": 2 + }, + "horizontal_gap": 0, + "vertical_gap": 0 + }, + { + "id": 4717, + "order": "4.00000000000000000000", + "type": "input_text", + "parent_element_id": 4708, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Estimated workload'" + }, + "required": true, + "validation_type": "integer", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.594.field_7270')" + }, + "is_multiline": false, + "rows": 3, + "input_type": "text" + }, + { + "id": 4700, + "order": "5.00000000000000000000", + "type": "text", + "parent_element_id": 4687, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Creator'" + }, + "format": "plain" + }, + { + "id": 4718, + "order": "5.00000000000000000000", + "type": "record_selector", + "parent_element_id": 4708, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 586, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [ + { + "schema_property": "field_7217", + "filterable": false, + "sortable": false, + "searchable": true + } + ], + "required": true, + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Assignee'" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.594.field_7257.0.id')" + }, + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "multiple": false, + "option_name_suffix": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 4701, + "order": "5.50000000000000000000", + "type": "link", + "parent_element_id": 4687, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 4, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 14, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 352, + "page_parameters": [ + { + "name": "user_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.594.field_7258.0.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.594.field_7258.0.value')" + }, + "variant": "link" + }, + { + "id": 4719, + "order": "6.00000000000000000000", + "type": "record_selector", + "parent_element_id": 4708, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 586, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [ + { + "schema_property": "field_7217", + "filterable": false, + "sortable": false, + "searchable": true + } + ], + "required": true, + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Reviewer'" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.594.field_7266.0.id')" + }, + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "multiple": false, + "option_name_suffix": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 4702, + "order": "6.50000000000000000000", + "type": "text", + "parent_element_id": 4687, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Registered workload'" + }, + "format": "plain" + }, + { + "id": 4703, + "order": "6.66666666666666696273", + "type": "text", + "parent_element_id": 4687, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 4, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 14, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "concat(round(get('data_source.594.field_7323') / 3600,2),' hours')" + }, + "format": "plain" + }, + { + "id": 4704, + "order": "6.75000000000000000000", + "type": "text", + "parent_element_id": 4687, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.594.field_7255.value') = \"Done\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Difference estimated vs registered'" + }, + "format": "plain" + }, + { + "id": 4705, + "order": "6.79999999999999982236", + "type": "text", + "parent_element_id": 4687, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.594.field_7255.value') = \"Done\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 4, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 14, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "concat(round(get('data_source.594.field_7327') / 3600,2),' hours')" + }, + "format": "plain" + }, + { + "id": 4706, + "order": "7.00000000000000000000", + "type": "text", + "parent_element_id": 4687, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.594.field_7255.value') = \"Done\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Completion date'" + }, + "format": "plain" + }, + { + "id": 4707, + "order": "8.00000000000000000000", + "type": "text", + "parent_element_id": 4687, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.594.field_7255.value') = \"Done\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 4, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 14, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.594.field_7261')" + }, + "format": "plain" + } + ], + "data_sources": [ + { + "id": 594, + "name": "Task details", + "order": "1.00000000000000000000", + "service": { + "id": 753, + "integration_id": 57, + "type": "local_baserow_get_row", + "sample_data": null, + "table_id": 756, + "view_id": null, + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + }, + { + "id": 595, + "name": "Blocks tasks", + "order": "2.00000000000000000000", + "service": { + "id": 754, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 756, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7264, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + } + ], + "workflow_actions": [ + { + "id": 472, + "type": "update_row", + "order": 1, + "page_id": 338, + "element_id": 4708, + "event": "submit", + "service": { + "id": 799, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 756, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "field_mappings": [ + { + "field_id": 7258, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7261, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7262, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7263, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7264, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7265, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7267, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7268, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7269, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7253, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4712')" + }, + "enabled": true + }, + { + "field_id": 7254, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4712')" + }, + "enabled": true + }, + { + "field_id": 7256, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4714')" + }, + "enabled": true + }, + { + "field_id": 7257, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4718')" + }, + "enabled": true + }, + { + "field_id": 7259, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4715')" + }, + "enabled": true + }, + { + "field_id": 7260, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4716')" + }, + "enabled": true + }, + { + "field_id": 7266, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4719')" + }, + "enabled": true + }, + { + "field_id": 7270, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4717')" + }, + "enabled": true + } + ] + } + }, + { + "id": 473, + "type": "update_row", + "order": 1, + "page_id": 338, + "element_id": 4693, + "event": "click", + "service": { + "id": 800, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 756, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "field_mappings": [ + { + "field_id": 7253, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7254, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7255, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Done'" + }, + "enabled": true + }, + { + "field_id": 7256, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7257, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7258, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7259, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7260, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7261, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7262, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7263, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7264, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7265, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7266, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7267, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7268, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7269, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7270, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + } + ] + } + }, + { + "id": 474, + "type": "update_row", + "order": 1, + "page_id": 338, + "element_id": 4697, + "event": "click", + "service": { + "id": 801, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 756, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "field_mappings": [ + { + "field_id": 7253, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7254, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7255, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Ready for review'" + }, + "enabled": true + }, + { + "field_id": 7256, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7257, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7258, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7259, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7260, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7261, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7262, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7263, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7264, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7265, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7266, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7267, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7268, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7269, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7270, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + } + ] + } + }, + { + "id": 475, + "type": "refresh_data_source", + "order": 2, + "page_id": 338, + "element_id": 4708, + "event": "submit", + "data_source_id": 594 + }, + { + "id": 476, + "type": "refresh_data_source", + "order": 2, + "page_id": 338, + "element_id": 4693, + "event": "click", + "data_source_id": 594 + }, + { + "id": 477, + "type": "refresh_data_source", + "order": 2, + "page_id": 338, + "element_id": 4697, + "event": "click", + "data_source_id": 594 + }, + { + "id": 478, + "type": "refresh_data_source", + "order": 3, + "page_id": 338, + "element_id": 4693, + "event": "click", + "data_source_id": 595 + } + ], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 339, + "name": "Task dependencies", + "order": 4, + "path": "/task-dependencies/:task_id", + "path_params": [ + { + "name": "task_id", + "type": "numeric" + } + ], + "query_params": [ + { + "name": "milestone_id", + "type": "numeric" + }, + { + "name": "project_id", + "type": "numeric" + } + ], + "shared": false, + "elements": [ + { + "id": 4728, + "order": "0.50000000000000000000", + "type": "text", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.598.field_7255.value') = \"Done\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "FQ0Fi", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Status: ',get('data_source.598.field_7255.value'))" + }, + "format": "plain" + }, + { + "id": 4724, + "order": "0.78571428571428569843", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.598.field_7255.value') = \"Ready for review\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "EAIyi", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 20, + "alignment": "center" + }, + { + "id": 4725, + "order": "0.78947368421052632748", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.598.field_7255.value') = \"In progress\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "rOEoY", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 20, + "alignment": "center" + }, + { + "id": 4729, + "order": "0.80000000000000004441", + "type": "text", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.598.field_7255.value') = \"To do\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "36yGj", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Status: ',get('data_source.598.field_7255.value'),'. Add a first action to start with the task.')" + }, + "format": "plain" + }, + { + "id": 4730, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.598.field_7333')" + }, + "level": 2 + }, + { + "id": 4731, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 4724, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Status: ',get('data_source.598.field_7255.value'),'. Mark the task as done once it is reviewed')" + }, + "format": "plain" + }, + { + "id": 4732, + "order": "1.00000000000000000000", + "type": "button", + "parent_element_id": 4724, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('user.id') = get('data_source.598.field_7266.0.id')" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_alignment": "right", + "button_text_color": "V6EVv", + "button_background_color": "FQ0Fi", + "button_hover_background_color": "FQ0Fi", + "button_active_background_color": "FQ0Fi" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Task is completed'" + } + }, + { + "id": 4733, + "order": "1.00000000000000000000", + "type": "link", + "parent_element_id": 4727, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 338, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.value')" + }, + "variant": "link" + }, + { + "id": 4738, + "order": "1.00000000000000000000", + "type": "form_container", + "parent_element_id": 4726, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "submit_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Update milestone'" + }, + "reset_initial_values_post_submission": false + }, + { + "id": 4739, + "order": "1.00000000000000000000", + "type": "form_container", + "parent_element_id": 4726, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "submit_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Update dependant tasks'" + }, + "reset_initial_values_post_submission": false + }, + { + "id": 4740, + "order": "1.00000000000000000000", + "type": "record_selector", + "parent_element_id": 4738, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 596, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [ + { + "schema_property": "field_7248", + "filterable": false, + "sortable": false, + "searchable": true + } + ], + "required": true, + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Milestone for this task'" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.598.field_7262.0.id')" + }, + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "multiple": false, + "option_name_suffix": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 4734, + "order": "1.50000000000000000000", + "type": "menu", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "menu": { + "button_font_size": 14, + "button_border_size": 3, + "button_font_weight": "medium", + "button_border_color": "primary", + "button_background_color": "border", + "button_hover_text_color": "ElMaZ", + "button_active_text_color": "ElMaZ", + "button_hover_border_color": "primary", + "button_active_border_color": "primary", + "button_hover_background_color": "V6EVv", + "button_active_background_color": "secondary" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffff80", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "orientation": "horizontal", + "alignment": "center", + "menu_items": [ + { + "id": 110, + "variant": "button", + "type": "link", + "menu_item_order": 0, + "uid": "963c892e-1193-441c-8d81-1edc8b99c17b", + "name": "Overview", + "navigation_type": "page", + "navigate_to_page_id": 338, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 111, + "variant": "link", + "type": "separator", + "menu_item_order": 1, + "uid": "8664320a-c3da-4605-a16d-ccf44d2d80fa", + "name": "Page", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 112, + "variant": "button", + "type": "link", + "menu_item_order": 2, + "uid": "e43f9b60-17dc-4e10-8235-ad1c878f7a17", + "name": "Dependencies", + "navigation_type": "page", + "navigate_to_page_id": 339, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [ + { + "name": "milestone_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.598.field_7262.0.id')" + } + }, + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.598.field_7263.0.id')" + } + } + ], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 113, + "variant": "link", + "type": "separator", + "menu_item_order": 3, + "uid": "826465eb-635c-4fc2-b78b-29c9ecb1687a", + "name": "Page 4", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 114, + "variant": "button", + "type": "link", + "menu_item_order": 4, + "uid": "c24c9743-fe25-4f41-b0e7-a18b6c58c2a2", + "name": "Actions", + "navigation_type": "page", + "navigate_to_page_id": 340, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'http://pm.localhost:3000/task-details/28#actions'" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 115, + "variant": "link", + "type": "separator", + "menu_item_order": 5, + "uid": "ddcfc2d6-8e29-4eac-9288-4d3e6c443980", + "name": "Page 1", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 116, + "variant": "button", + "type": "link", + "menu_item_order": 6, + "uid": "5315d54a-8abc-4cdb-b79d-57706a74b1f4", + "name": "Messages", + "navigation_type": "page", + "navigate_to_page_id": 341, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'#messages'" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 117, + "variant": "link", + "type": "separator", + "menu_item_order": 7, + "uid": "ff764b14-2022-4a88-88fd-727cbc464490", + "name": "Page 3", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 118, + "variant": "button", + "type": "link", + "menu_item_order": 8, + "uid": "a8ea4e50-710a-4f6b-8e67-091a7edf6fc4", + "name": "Files", + "navigation_type": "page", + "navigate_to_page_id": 342, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'#files'" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + } + ] + }, + { + "id": 4735, + "order": "1.50000000000000000000", + "type": "heading", + "parent_element_id": 4726, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 30, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Currently selected'" + }, + "level": 4 + }, + { + "id": 4741, + "order": "1.50000000000000000000", + "type": "record_selector", + "parent_element_id": 4739, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 597, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [ + { + "schema_property": "field_7253", + "filterable": false, + "sortable": false, + "searchable": true + }, + { + "schema_property": "field_7248", + "filterable": false, + "sortable": false, + "searchable": true + } + ], + "required": false, + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Select dependent tasks'" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.598.field_7264.*.id')" + }, + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "multiple": true, + "option_name_suffix": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 4726, + "order": "1.66666666666666674068", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 50, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 60, + "alignment": "top" + }, + { + "id": 4727, + "order": "2.00000000000000000000", + "type": "repeat", + "parent_element_id": 4726, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 10, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 598, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": "field_7335", + "property_options": [], + "orientation": "vertical", + "items_per_row": { + "tablet": 2, + "desktop": 2, + "smartphone": 2 + }, + "horizontal_gap": 0, + "vertical_gap": 0 + }, + { + "id": 4736, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 4725, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Status: ',get('data_source.598.field_7255.value'),'. Mark the task as ready for review once it is completed')" + }, + "format": "plain" + }, + { + "id": 4737, + "order": "2.00000000000000000000", + "type": "button", + "parent_element_id": 4725, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('user.id') = get('data_source.598.field_7257.0.id')" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_alignment": "right", + "button_text_color": "V6EVv", + "button_background_color": "EAIyi", + "button_hover_background_color": "EAIyi", + "button_active_background_color": "EAIyi" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Ready for review'" + } + }, + { + "id": 4742, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 4738, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_text_color": "error", + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 5, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'WARNING: changing the milestone of a task removes all dependencies for that task!'" + }, + "format": "plain" + } + ], + "data_sources": [ + { + "id": 596, + "name": "Milestones", + "order": "3.00000000000000000000", + "service": { + "id": 755, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 755, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7250, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 597, + "name": "Milestone tasks", + "order": "4.00000000000000000000", + "service": { + "id": 756, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 756, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7262, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.milestone_id')" + }, + "value_is_formula": true + }, + { + "field_id": 7271, + "type": "not_equal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 598, + "name": "Task details", + "order": "5.00000000000000000000", + "service": { + "id": 757, + "integration_id": 57, + "type": "local_baserow_get_row", + "sample_data": null, + "table_id": 756, + "view_id": null, + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + } + ], + "workflow_actions": [ + { + "id": 479, + "type": "update_row", + "order": 1, + "page_id": 339, + "element_id": 4732, + "event": "click", + "service": { + "id": 802, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 756, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "field_mappings": [ + { + "field_id": 7253, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7254, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7255, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Done'" + }, + "enabled": true + }, + { + "field_id": 7256, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7257, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7258, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7259, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7260, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7261, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7262, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7263, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7264, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7265, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7266, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7267, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7268, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7269, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7270, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + } + ] + } + }, + { + "id": 480, + "type": "update_row", + "order": 1, + "page_id": 339, + "element_id": 4737, + "event": "click", + "service": { + "id": 803, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 756, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "field_mappings": [ + { + "field_id": 7253, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7254, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7255, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Ready for review'" + }, + "enabled": true + }, + { + "field_id": 7256, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7257, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7258, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7259, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7260, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7261, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7262, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7263, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7264, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7265, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7266, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7267, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7268, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7269, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7270, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + } + ] + } + }, + { + "id": 481, + "type": "update_row", + "order": 1, + "page_id": 339, + "element_id": 4738, + "event": "submit", + "service": { + "id": 804, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 756, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "field_mappings": [ + { + "field_id": 7262, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4740')" + }, + "enabled": true + }, + { + "field_id": 7264, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "\"\"" + }, + "enabled": true + } + ] + } + }, + { + "id": 482, + "type": "update_row", + "order": 1, + "page_id": 339, + "element_id": 4739, + "event": "submit", + "service": { + "id": 805, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 756, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "field_mappings": [ + { + "field_id": 7264, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4741')" + }, + "enabled": true + } + ] + } + }, + { + "id": 483, + "type": "refresh_data_source", + "order": 2, + "page_id": 339, + "element_id": 4732, + "event": "click", + "data_source_id": 598 + }, + { + "id": 484, + "type": "refresh_data_source", + "order": 2, + "page_id": 339, + "element_id": 4737, + "event": "click", + "data_source_id": 598 + }, + { + "id": 485, + "type": "open_page", + "order": 2, + "page_id": 339, + "element_id": 4738, + "event": "submit", + "navigation_type": "page", + "navigate_to_page_id": 339, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [ + { + "name": "milestone_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('previous_action.481.field_7262.0.id')" + } + }, + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self" + }, + { + "id": 486, + "type": "refresh_data_source", + "order": 2, + "page_id": 339, + "element_id": 4739, + "event": "submit", + "data_source_id": 598 + } + ], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 340, + "name": "Task actions", + "order": 5, + "path": "/task-actions/:task_id", + "path_params": [ + { + "name": "task_id", + "type": "numeric" + } + ], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 4746, + "order": "0.50000000000000000000", + "type": "text", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.599.field_7255.value') = \"Done\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "FQ0Fi", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Status: ',get('data_source.599.field_7255.value'))" + }, + "format": "plain" + }, + { + "id": 4754, + "order": "0.50000000000000000000", + "type": "simple_container", + "parent_element_id": 4745, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.601.0.id') > 0" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "warning", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4760, + "order": "0.50000000000000000000", + "type": "text", + "parent_element_id": 4754, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 16, + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'You have an action running'" + }, + "format": "plain" + }, + { + "id": 4761, + "order": "0.66666666666666662966", + "type": "link", + "parent_element_id": 4754, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 340, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.601.0.field_7273.0.value')" + }, + "variant": "link" + }, + { + "id": 4743, + "order": "0.78571428571428569843", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.599.field_7255.value') = \"Ready for review\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "EAIyi", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 20, + "alignment": "center" + }, + { + "id": 4744, + "order": "0.78947368421052632748", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.599.field_7255.value') = \"In progress\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "rOEoY", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 20, + "alignment": "center" + }, + { + "id": 4747, + "order": "0.80000000000000004441", + "type": "text", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.599.field_7255.value') = \"To do\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "36yGj", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Status: ',get('data_source.599.field_7255.value'),'. Add a first action to start with the task.')" + }, + "format": "plain" + }, + { + "id": 4748, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.599.field_7333')" + }, + "level": 2 + }, + { + "id": 4749, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 4743, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Status: ',get('data_source.599.field_7255.value'),'. Mark the task as done once it is reviewed')" + }, + "format": "plain" + }, + { + "id": 4750, + "order": "1.00000000000000000000", + "type": "button", + "parent_element_id": 4743, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('user.id') = get('data_source.599.field_7266.0.id')" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_alignment": "right", + "button_text_color": "V6EVv", + "button_background_color": "FQ0Fi", + "button_hover_background_color": "FQ0Fi", + "button_active_background_color": "FQ0Fi" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Task is completed'" + } + }, + { + "id": 4755, + "order": "1.00000000000000000000", + "type": "form_container", + "parent_element_id": 4745, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "and(get('data_source.602.result') = 0,or(get('data_source.599.field_7257.0.id') = get('user.id'),get('data_source.599.field_7266.0.id') = get('user.id')))" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "submit_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Create new action'" + }, + "reset_initial_values_post_submission": true + }, + { + "id": 4758, + "order": "1.00000000000000000000", + "type": "input_text", + "parent_element_id": 4755, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Action'" + }, + "required": true, + "validation_type": "any", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "is_multiline": false, + "rows": 3, + "input_type": "text" + }, + { + "id": 4762, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 4757, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "medium" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 2, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "concat(get('current_record.field_7272'),' (',round(get('current_record.field_7314') / 3600,2),' hours)')" + }, + "format": "plain" + }, + { + "id": 4763, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 4754, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "medium" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 2, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "concat(get('data_source.601.0.field_7272'),' (',round(get('data_source.601.0.field_7314') / 3600,2),' hours)')" + }, + "format": "plain" + }, + { + "id": 4751, + "order": "1.50000000000000000000", + "type": "menu", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "menu": { + "button_font_size": 14, + "button_border_size": 3, + "button_font_weight": "medium", + "button_border_color": "primary", + "button_background_color": "border", + "button_hover_text_color": "ElMaZ", + "button_active_text_color": "ElMaZ", + "button_hover_border_color": "primary", + "button_active_border_color": "primary", + "button_hover_background_color": "V6EVv", + "button_active_background_color": "secondary" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffff80", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "orientation": "horizontal", + "alignment": "center", + "menu_items": [ + { + "id": 119, + "variant": "button", + "type": "link", + "menu_item_order": 0, + "uid": "907e3115-cdfe-41d7-9b43-1290198100a5", + "name": "Overview", + "navigation_type": "page", + "navigate_to_page_id": 338, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 120, + "variant": "link", + "type": "separator", + "menu_item_order": 1, + "uid": "71bef7cf-360c-4197-9943-77b19190009d", + "name": "Page", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 121, + "variant": "button", + "type": "link", + "menu_item_order": 2, + "uid": "6179f334-48b7-494e-b29c-9f3867746cf1", + "name": "Dependencies", + "navigation_type": "page", + "navigate_to_page_id": 339, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [ + { + "name": "milestone_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.599.field_7262.0.id')" + } + }, + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.599.field_7263.0.id')" + } + } + ], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 122, + "variant": "link", + "type": "separator", + "menu_item_order": 3, + "uid": "21403ccd-c14e-414e-b7ee-40c3a8b84993", + "name": "Page 4", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 123, + "variant": "button", + "type": "link", + "menu_item_order": 4, + "uid": "088ab6e9-135d-483a-93d9-92588a5aa7e4", + "name": "Actions", + "navigation_type": "page", + "navigate_to_page_id": 340, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'http://pm.localhost:3000/task-details/28#actions'" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 124, + "variant": "link", + "type": "separator", + "menu_item_order": 5, + "uid": "06d72c46-69d9-4727-852e-262fb107a31f", + "name": "Page 1", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 125, + "variant": "button", + "type": "link", + "menu_item_order": 6, + "uid": "1eed2308-b733-49bb-976b-bb34b817d4d6", + "name": "Messages", + "navigation_type": "page", + "navigate_to_page_id": 341, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'#messages'" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 126, + "variant": "link", + "type": "separator", + "menu_item_order": 7, + "uid": "c49f4201-cfb7-4c5f-a59f-6acaff40a141", + "name": "Page 3", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 127, + "variant": "button", + "type": "link", + "menu_item_order": 8, + "uid": "e8273419-b222-4086-a69b-ce4f8822a549", + "name": "Files", + "navigation_type": "page", + "navigate_to_page_id": 342, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'#files'" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + } + ] + }, + { + "id": 4764, + "order": "1.50000000000000000000", + "type": "text", + "parent_element_id": 4754, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 4, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.601.0.field_7276')" + }, + "format": "plain" + }, + { + "id": 4752, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 4744, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Status: ',get('data_source.599.field_7255.value'),'. Mark the task as ready for review once it is completed')" + }, + "format": "plain" + }, + { + "id": 4753, + "order": "2.00000000000000000000", + "type": "button", + "parent_element_id": 4744, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('user.id') = get('data_source.599.field_7257.0.id')" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_alignment": "right", + "button_text_color": "V6EVv", + "button_background_color": "EAIyi", + "button_hover_background_color": "EAIyi", + "button_active_background_color": "EAIyi" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Ready for review'" + } + }, + { + "id": 4756, + "order": "2.00000000000000000000", + "type": "repeat", + "parent_element_id": 4745, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 600, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "orientation": "vertical", + "items_per_row": { + "tablet": 2, + "desktop": 2, + "smartphone": 2 + }, + "horizontal_gap": 0, + "vertical_gap": 10 + }, + { + "id": 4759, + "order": "2.00000000000000000000", + "type": "input_text", + "parent_element_id": 4755, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Notes'" + }, + "required": false, + "validation_type": "any", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "is_multiline": true, + "rows": 3, + "input_type": "text" + }, + { + "id": 4765, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 4757, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11 + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "concat('From ',datetime_format(get('current_record.field_7274'),'YYYY-MM-DD HH:mm'),' until ',datetime_format(get('current_record.field_7275'),'YYYY-MM-DD HH:mm'))" + }, + "format": "plain" + }, + { + "id": 4766, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 4754, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 4, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "concat('Started at ',datetime_format(get('data_source.601.0.field_7274'),'YYYY-MM-DD HH:mm'))" + }, + "format": "plain" + }, + { + "id": 4745, + "order": "3.00000000000000000000", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 50, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 60, + "alignment": "top" + }, + { + "id": 4757, + "order": "3.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4756, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4767, + "order": "3.00000000000000000000", + "type": "text", + "parent_element_id": 4757, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 4, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7276')" + }, + "format": "plain" + }, + { + "id": 4768, + "order": "3.00000000000000000000", + "type": "button", + "parent_element_id": 4754, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_text_color": "ElMaZ", + "button_background_color": "error", + "button_hover_text_color": "ElMaZ", + "button_active_text_color": "ElMaZ", + "button_hover_background_color": "#b61e0a", + "button_active_background_color": "error" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Close action'" + } + } + ], + "data_sources": [ + { + "id": 599, + "name": "Task details", + "order": "1.00000000000000000000", + "service": { + "id": 758, + "integration_id": 57, + "type": "local_baserow_get_row", + "sample_data": null, + "table_id": 756, + "view_id": null, + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + }, + { + "id": 600, + "name": "Closed actions", + "order": "2.00000000000000000000", + "service": { + "id": 759, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 757, + "view_id": 3373, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7273, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 601, + "name": "Open action", + "order": "3.00000000000000000000", + "service": { + "id": 760, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 757, + "view_id": 3374, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7277, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('user.id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 602, + "name": "Count open actions", + "order": "4.00000000000000000000", + "service": { + "id": 761, + "integration_id": 57, + "type": "local_baserow_aggregate_rows", + "sample_data": null, + "table_id": 757, + "view_id": 3374, + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7277, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('user.id')" + }, + "value_is_formula": true + } + ], + "field_id": 7272, + "aggregation_type": "count" + } + } + ], + "workflow_actions": [ + { + "id": 487, + "type": "update_row", + "order": 1, + "page_id": 340, + "element_id": 4750, + "event": "click", + "service": { + "id": 806, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 756, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "field_mappings": [ + { + "field_id": 7253, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7254, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7255, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Done'" + }, + "enabled": true + }, + { + "field_id": 7256, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7257, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7258, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7259, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7260, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7261, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7262, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7263, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7264, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7265, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7266, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7267, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7268, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7269, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7270, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + } + ] + } + }, + { + "id": 488, + "type": "update_row", + "order": 1, + "page_id": 340, + "element_id": 4753, + "event": "click", + "service": { + "id": 807, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 756, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "field_mappings": [ + { + "field_id": 7253, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7254, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7255, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Ready for review'" + }, + "enabled": true + }, + { + "field_id": 7256, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7257, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7258, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7259, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7260, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7261, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7262, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7263, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7264, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7265, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7266, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7267, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7268, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7269, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7270, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + } + ] + } + }, + { + "id": 489, + "type": "create_row", + "order": 1, + "page_id": 340, + "element_id": 4755, + "event": "submit", + "service": { + "id": 808, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 757, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "field_mappings": [ + { + "field_id": 7272, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4758')" + }, + "enabled": true + }, + { + "field_id": 7273, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "enabled": true + }, + { + "field_id": 7274, + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "now()" + }, + "enabled": true + }, + { + "field_id": 7276, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4759')" + }, + "enabled": true + }, + { + "field_id": 7277, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('user.id')" + }, + "enabled": true + } + ] + } + }, + { + "id": 490, + "type": "update_row", + "order": 1, + "page_id": 340, + "element_id": 4768, + "event": "click", + "service": { + "id": 809, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 757, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.601.0.id')" + }, + "field_mappings": [ + { + "field_id": 7275, + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "now()" + }, + "enabled": true + } + ] + } + }, + { + "id": 491, + "type": "refresh_data_source", + "order": 2, + "page_id": 340, + "element_id": 4750, + "event": "click", + "data_source_id": 599 + }, + { + "id": 492, + "type": "refresh_data_source", + "order": 2, + "page_id": 340, + "element_id": 4753, + "event": "click", + "data_source_id": 599 + }, + { + "id": 493, + "type": "update_row", + "order": 2, + "page_id": 340, + "element_id": 4755, + "event": "submit", + "service": { + "id": 810, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 756, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "field_mappings": [ + { + "field_id": 7255, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'In progress'" + }, + "enabled": true + } + ] + } + }, + { + "id": 494, + "type": "refresh_data_source", + "order": 2, + "page_id": 340, + "element_id": 4768, + "event": "click", + "data_source_id": 600 + }, + { + "id": 495, + "type": "refresh_data_source", + "order": 3, + "page_id": 340, + "element_id": 4755, + "event": "submit", + "data_source_id": 600 + }, + { + "id": 496, + "type": "refresh_data_source", + "order": 3, + "page_id": 340, + "element_id": 4768, + "event": "click", + "data_source_id": 601 + }, + { + "id": 497, + "type": "refresh_data_source", + "order": 4, + "page_id": 340, + "element_id": 4755, + "event": "submit", + "data_source_id": 599 + }, + { + "id": 498, + "type": "refresh_data_source", + "order": 4, + "page_id": 340, + "element_id": 4768, + "event": "click", + "data_source_id": 602 + }, + { + "id": 499, + "type": "refresh_data_source", + "order": 5, + "page_id": 340, + "element_id": 4755, + "event": "submit", + "data_source_id": 602 + }, + { + "id": 500, + "type": "refresh_data_source", + "order": 6, + "page_id": 340, + "element_id": 4755, + "event": "submit", + "data_source_id": 601 + } + ], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 341, + "name": "Task messages", + "order": 6, + "path": "/task-messages/:task_id", + "path_params": [ + { + "name": "task_id", + "type": "numeric" + } + ], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 4772, + "order": "0.50000000000000000000", + "type": "text", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.603.field_7255.value') = \"Done\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "FQ0Fi", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Status: ',get('data_source.603.field_7255.value'))" + }, + "format": "plain" + }, + { + "id": 4769, + "order": "0.78571428571428569843", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.603.field_7255.value') = \"Ready for review\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "EAIyi", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 20, + "alignment": "center" + }, + { + "id": 4770, + "order": "0.78947368421052632748", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.603.field_7255.value') = \"In progress\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "rOEoY", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 20, + "alignment": "center" + }, + { + "id": 4773, + "order": "0.80000000000000004441", + "type": "text", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.603.field_7255.value') = \"To do\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "36yGj", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Status: ',get('data_source.603.field_7255.value'),'. Add a first action to start with the task.')" + }, + "format": "plain" + }, + { + "id": 4774, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.603.field_7333')" + }, + "level": 2 + }, + { + "id": 4775, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 4769, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Status: ',get('data_source.603.field_7255.value'),'. Mark the task as done once it is reviewed')" + }, + "format": "plain" + }, + { + "id": 4776, + "order": "1.00000000000000000000", + "type": "button", + "parent_element_id": 4769, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('user.id') = get('data_source.603.field_7266.0.id')" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_alignment": "right", + "button_text_color": "V6EVv", + "button_background_color": "FQ0Fi", + "button_hover_background_color": "FQ0Fi", + "button_active_background_color": "FQ0Fi" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Task is completed'" + } + }, + { + "id": 4780, + "order": "1.00000000000000000000", + "type": "form_container", + "parent_element_id": 4771, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "or(get('data_source.603.field_7257.0.id') = get('user.id'),get('data_source.603.field_7266.0.id') = get('user.id'))" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "submit_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Send message'" + }, + "reset_initial_values_post_submission": true + }, + { + "id": 4781, + "order": "1.00000000000000000000", + "type": "repeat", + "parent_element_id": 4771, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 604, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "orientation": "vertical", + "items_per_row": { + "tablet": 2, + "desktop": 2, + "smartphone": 2 + }, + "horizontal_gap": 0, + "vertical_gap": 20 + }, + { + "id": 4782, + "order": "1.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4781, + "place_in_container": null, + "css_classes": "flex__container", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 2, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4783, + "order": "1.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4782, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4787, + "order": "1.00000000000000000000", + "type": "input_text", + "parent_element_id": 4780, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Message'" + }, + "required": true, + "validation_type": "any", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "is_multiline": true, + "rows": 5, + "input_type": "text" + }, + { + "id": 4788, + "order": "1.00000000000000000000", + "type": "image", + "parent_element_id": 4783, + "place_in_container": null, + "css_classes": "round-image", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 4, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "image_source_type": "url", + "image_file_id": null, + "image_url": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7306.0.url')" + }, + "alt_text": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 4789, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 4785, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_text_alignment": "right" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7278')" + }, + "format": "plain" + }, + { + "id": 4777, + "order": "1.50000000000000000000", + "type": "menu", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "menu": { + "button_font_size": 14, + "button_border_size": 3, + "button_font_weight": "medium", + "button_border_color": "primary", + "button_background_color": "border", + "button_hover_text_color": "ElMaZ", + "button_active_text_color": "ElMaZ", + "button_hover_border_color": "primary", + "button_active_border_color": "primary", + "button_hover_background_color": "V6EVv", + "button_active_background_color": "secondary" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffff80", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "orientation": "horizontal", + "alignment": "center", + "menu_items": [ + { + "id": 128, + "variant": "button", + "type": "link", + "menu_item_order": 0, + "uid": "e00ff083-0e2c-4a1d-a761-c84c24c9596a", + "name": "Overview", + "navigation_type": "page", + "navigate_to_page_id": 338, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 129, + "variant": "link", + "type": "separator", + "menu_item_order": 1, + "uid": "5fc3d72c-d28b-46a4-b7ad-eb1292c9ec43", + "name": "Page", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 130, + "variant": "button", + "type": "link", + "menu_item_order": 2, + "uid": "82395484-4ae3-476e-8441-003e9dfc8e8c", + "name": "Dependencies", + "navigation_type": "page", + "navigate_to_page_id": 339, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [ + { + "name": "milestone_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.603.field_7262.0.id')" + } + }, + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.603.field_7263.0.id')" + } + } + ], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 131, + "variant": "link", + "type": "separator", + "menu_item_order": 3, + "uid": "91f3afbe-1843-439d-bc10-15c35c1c471b", + "name": "Page 2", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 132, + "variant": "button", + "type": "link", + "menu_item_order": 4, + "uid": "306ef92d-08bd-4947-9e95-4e99f4f7db50", + "name": "Actions", + "navigation_type": "page", + "navigate_to_page_id": 340, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'http://pm.localhost:3000/task-details/28#actions'" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 133, + "variant": "link", + "type": "separator", + "menu_item_order": 5, + "uid": "39ad6de5-34de-43b5-81d4-85d00e6d7378", + "name": "Page 1", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 134, + "variant": "button", + "type": "link", + "menu_item_order": 6, + "uid": "80a11905-ab49-4758-bca5-14b1fb30c8be", + "name": "Messages", + "navigation_type": "page", + "navigate_to_page_id": 341, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'#messages'" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 135, + "variant": "link", + "type": "separator", + "menu_item_order": 7, + "uid": "5b3765f7-2b49-4842-af25-3610997fe36a", + "name": "Page 3", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 136, + "variant": "button", + "type": "link", + "menu_item_order": 8, + "uid": "37a971ab-07d5-46fc-8e08-eb086b501bbb", + "name": "Files", + "navigation_type": "page", + "navigate_to_page_id": 342, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'#files'" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + } + ] + }, + { + "id": 4790, + "order": "1.50000000000000000000", + "type": "link", + "parent_element_id": 4784, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "link": { + "link_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 2, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 10, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 352, + "page_parameters": [ + { + "name": "user_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7279.0.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7279.0.value')" + }, + "variant": "link" + }, + { + "id": 4771, + "order": "2.00000000000000000000", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 50, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 50, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 60, + "alignment": "top" + }, + { + "id": 4778, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 4770, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Status: ',get('data_source.603.field_7255.value'),'. Mark the task as ready for review once it is completed')" + }, + "format": "plain" + }, + { + "id": 4779, + "order": "2.00000000000000000000", + "type": "button", + "parent_element_id": 4770, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('user.id') = get('data_source.603.field_7257.0.id')" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_alignment": "right", + "button_text_color": "V6EVv", + "button_background_color": "EAIyi", + "button_hover_background_color": "EAIyi", + "button_active_background_color": "EAIyi" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Ready for review'" + } + }, + { + "id": 4784, + "order": "2.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4782, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4785, + "order": "2.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4781, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('current_record.field_7279.0.id') != get('user.id')" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "border", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4791, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 4784, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11 + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 10, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "concat(\"On \",datetime_format(get('current_record.field_7280'),'YYYY-MM-DD HH:mm'))" + }, + "format": "plain" + }, + { + "id": 4792, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 4786, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7278')" + }, + "format": "plain" + }, + { + "id": 4786, + "order": "3.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4781, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('current_record.field_7279.0.id') = get('user.id')" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + } + ], + "data_sources": [ + { + "id": 603, + "name": "Task details", + "order": "1.00000000000000000000", + "service": { + "id": 762, + "integration_id": 57, + "type": "local_baserow_get_row", + "sample_data": null, + "table_id": 756, + "view_id": null, + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + }, + { + "id": 604, + "name": "Messages", + "order": "2.00000000000000000000", + "service": { + "id": 763, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 758, + "view_id": 3375, + "sortings": [ + { + "field_id": 7280, + "order_by": "ASC" + } + ], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7281, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + } + ], + "workflow_actions": [ + { + "id": 501, + "type": "update_row", + "order": 1, + "page_id": 341, + "element_id": 4776, + "event": "click", + "service": { + "id": 811, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 756, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "field_mappings": [ + { + "field_id": 7253, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7254, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7255, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Done'" + }, + "enabled": true + }, + { + "field_id": 7256, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7257, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7258, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7259, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7260, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7261, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7262, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7263, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7264, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7265, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7266, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7267, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7268, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7269, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7270, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + } + ] + } + }, + { + "id": 502, + "type": "update_row", + "order": 1, + "page_id": 341, + "element_id": 4779, + "event": "click", + "service": { + "id": 812, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 756, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "field_mappings": [ + { + "field_id": 7253, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7254, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7255, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Ready for review'" + }, + "enabled": true + }, + { + "field_id": 7256, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7257, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7258, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7259, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7260, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7261, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7262, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7263, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7264, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7265, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7266, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7267, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7268, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7269, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7270, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + } + ] + } + }, + { + "id": 503, + "type": "create_row", + "order": 1, + "page_id": 341, + "element_id": 4780, + "event": "submit", + "service": { + "id": 813, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 758, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "field_mappings": [ + { + "field_id": 7278, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4787')" + }, + "enabled": true + }, + { + "field_id": 7279, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('user.id')" + }, + "enabled": true + }, + { + "field_id": 7281, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "enabled": true + } + ] + } + }, + { + "id": 504, + "type": "refresh_data_source", + "order": 2, + "page_id": 341, + "element_id": 4776, + "event": "click", + "data_source_id": 603 + }, + { + "id": 505, + "type": "refresh_data_source", + "order": 2, + "page_id": 341, + "element_id": 4779, + "event": "click", + "data_source_id": 603 + }, + { + "id": 506, + "type": "refresh_data_source", + "order": 2, + "page_id": 341, + "element_id": 4780, + "event": "submit", + "data_source_id": 604 + } + ], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 342, + "name": "Task files", + "order": 7, + "path": "/task-files/:task_id", + "path_params": [ + { + "name": "task_id", + "type": "numeric" + } + ], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 4796, + "order": "0.33333333333333331483", + "type": "heading", + "parent_element_id": 4795, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Files related to task'" + }, + "level": 4 + }, + { + "id": 4797, + "order": "0.50000000000000000000", + "type": "text", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.605.field_7255.value') = \"Done\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "FQ0Fi", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Status: ',get('data_source.605.field_7255.value'))" + }, + "format": "plain" + }, + { + "id": 4798, + "order": "0.50000000000000000000", + "type": "table", + "parent_element_id": 4795, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "table": {} + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 606, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "1884f4e3-b520-44c6-bc1a-0aa8ec9eb227", + "name": "Name", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7282')" + } + } + }, + { + "uid": "69d1c2cc-cbd3-45a6-b7a6-bfcb98d864e7", + "name": "File", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "custom", + "navigate_to_page_id": null, + "page_parameters": [], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7284.0.url')" + }, + "target": "blank", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7284.0.visible_name')" + }, + "variant": "link" + } + }, + { + "uid": "42bdd72f-e6b6-452f-9820-9fb82583a045", + "name": "", + "type": "button", + "styles": { + "cell": { + "button_background_color": "transparent", + "button_hover_background_color": "transparent", + "button_active_background_color": "transparent" + } + }, + "config": { + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'\u274c'" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + }, + { + "id": 4793, + "order": "0.78571428571428569843", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.605.field_7255.value') = \"Ready for review\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "EAIyi", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 20, + "alignment": "center" + }, + { + "id": 4794, + "order": "0.78947368421052632748", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.605.field_7255.value') = \"In progress\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "rOEoY", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 20, + "alignment": "center" + }, + { + "id": 4799, + "order": "0.80000000000000004441", + "type": "text", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.605.field_7255.value') = \"To do\"" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "36yGj", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Status: ',get('data_source.605.field_7255.value'),'. Add a first action to start with the task.')" + }, + "format": "plain" + }, + { + "id": 4800, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.605.field_7333')" + }, + "level": 2 + }, + { + "id": 4801, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 4793, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Status: ',get('data_source.605.field_7255.value'),'. Mark the task as done once it is reviewed')" + }, + "format": "plain" + }, + { + "id": 4802, + "order": "1.00000000000000000000", + "type": "button", + "parent_element_id": 4793, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('user.id') = get('data_source.605.field_7266.0.id')" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_alignment": "right", + "button_text_color": "V6EVv", + "button_background_color": "FQ0Fi", + "button_hover_background_color": "FQ0Fi", + "button_active_background_color": "FQ0Fi" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Task is completed'" + } + }, + { + "id": 4808, + "order": "1.00000000000000000000", + "type": "form_container", + "parent_element_id": 4795, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "submit_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Add file'" + }, + "reset_initial_values_post_submission": true + }, + { + "id": 4809, + "order": "1.00000000000000000000", + "type": "input_text", + "parent_element_id": 4808, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Name'" + }, + "required": true, + "validation_type": "any", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "is_multiline": false, + "rows": 3, + "input_type": "text" + }, + { + "id": 4803, + "order": "1.50000000000000000000", + "type": "menu", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "menu": { + "button_font_size": 14, + "button_border_size": 3, + "button_font_weight": "medium", + "button_border_color": "primary", + "button_background_color": "border", + "button_hover_text_color": "ElMaZ", + "button_active_text_color": "ElMaZ", + "button_hover_border_color": "primary", + "button_active_border_color": "primary", + "button_hover_background_color": "V6EVv", + "button_active_background_color": "secondary" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffff80", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "orientation": "horizontal", + "alignment": "center", + "menu_items": [ + { + "id": 137, + "variant": "button", + "type": "link", + "menu_item_order": 0, + "uid": "77942c5d-dce8-41ff-bff9-892581e2b571", + "name": "Overview", + "navigation_type": "page", + "navigate_to_page_id": 338, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 138, + "variant": "link", + "type": "separator", + "menu_item_order": 1, + "uid": "b0f8da3c-0fcc-412c-a9ae-629cf5c30db7", + "name": "Page 2", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 139, + "variant": "button", + "type": "link", + "menu_item_order": 2, + "uid": "3ac67e99-83ae-4000-a64a-ff9506a3bef5", + "name": "Dependencies", + "navigation_type": "page", + "navigate_to_page_id": 339, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [ + { + "name": "milestone_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.605.field_7262.0.id')" + } + }, + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.605.field_7263.0.id')" + } + } + ], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 140, + "variant": "link", + "type": "separator", + "menu_item_order": 3, + "uid": "cfb76741-6082-4c6a-9fbd-7980627327fd", + "name": "Page", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 141, + "variant": "button", + "type": "link", + "menu_item_order": 4, + "uid": "6db968b1-41ef-4f23-86be-deedf3f7dcdc", + "name": "Actions", + "navigation_type": "page", + "navigate_to_page_id": 340, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'http://pm.localhost:3000/task-details/28#actions'" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 142, + "variant": "link", + "type": "separator", + "menu_item_order": 5, + "uid": "f4407104-6e21-483f-8db4-d26a92c5a837", + "name": "Page 1", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 143, + "variant": "button", + "type": "link", + "menu_item_order": 6, + "uid": "ec3d8afa-80bb-4481-97f5-f93be1b01bbb", + "name": "Messages", + "navigation_type": "page", + "navigate_to_page_id": 341, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'#messages'" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 144, + "variant": "link", + "type": "separator", + "menu_item_order": 7, + "uid": "bbbd8ed0-374b-4570-b888-6495030ccaab", + "name": "Page 3", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 145, + "variant": "button", + "type": "link", + "menu_item_order": 8, + "uid": "e350b90c-1eba-490e-b73a-fd7b5fde6ab6", + "name": "Files", + "navigation_type": "page", + "navigate_to_page_id": 342, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'#files'" + }, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + } + ] + }, + { + "id": 4795, + "order": "2.00000000000000000000", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 50, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 50, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 60, + "alignment": "top" + }, + { + "id": 4804, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 4794, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat('Status: ',get('data_source.605.field_7255.value'),'. Mark the task as ready for review once it is completed')" + }, + "format": "plain" + }, + { + "id": 4805, + "order": "2.00000000000000000000", + "type": "button", + "parent_element_id": 4794, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('user.id') = get('data_source.605.field_7257.0.id')" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_alignment": "right", + "button_text_color": "V6EVv", + "button_background_color": "EAIyi", + "button_hover_background_color": "EAIyi", + "button_active_background_color": "EAIyi" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Ready for review'" + } + }, + { + "id": 4806, + "order": "2.00000000000000000000", + "type": "heading", + "parent_element_id": 4795, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 30, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Files related to the project'" + }, + "level": 4 + }, + { + "id": 4810, + "order": "2.00000000000000000000", + "type": "input_file", + "parent_element_id": 4808, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Select file'" + }, + "required": true, + "multiple": false, + "default_name": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "help_text": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "max_filesize": 5, + "allowed_filetypes": [], + "preview": false + }, + { + "id": 4807, + "order": "3.00000000000000000000", + "type": "table", + "parent_element_id": 4795, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "table": {} + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 607, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "0ae8c193-d37f-4b21-9277-44734b955fd3", + "name": "Name", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7282')" + } + } + }, + { + "uid": "c5d148ca-b153-4b70-b81f-ce760ef92496", + "name": "File", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "custom", + "navigate_to_page_id": null, + "page_parameters": [], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7284.0.url')" + }, + "target": "blank", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7284.0.visible_name')" + }, + "variant": "link" + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + } + ], + "data_sources": [ + { + "id": 605, + "name": "Task details", + "order": "1.00000000000000000000", + "service": { + "id": 764, + "integration_id": 57, + "type": "local_baserow_get_row", + "sample_data": null, + "table_id": 756, + "view_id": null, + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + } + } + }, + { + "id": 606, + "name": "Task files", + "order": "2.00000000000000000000", + "service": { + "id": 765, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 759, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7283, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 607, + "name": "Project files", + "order": "3.00000000000000000000", + "service": { + "id": 766, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 759, + "view_id": 3377, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7285, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.605.field_7263.0.id')" + }, + "value_is_formula": true + }, + { + "field_id": 7283, + "type": "empty", + "value": { + "mode": "raw", + "version": "0.1", + "formula": "" + }, + "value_is_formula": false + } + ], + "default_result_count": 20 + } + } + ], + "workflow_actions": [ + { + "id": 507, + "type": "update_row", + "order": 1, + "page_id": 342, + "element_id": 4802, + "event": "click", + "service": { + "id": 814, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 756, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "field_mappings": [ + { + "field_id": 7253, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7254, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7255, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Done'" + }, + "enabled": true + }, + { + "field_id": 7256, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7257, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7258, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7259, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7260, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7261, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7262, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7263, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7264, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7265, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7266, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7267, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7268, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7269, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7270, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + } + ] + } + }, + { + "id": 508, + "type": "update_row", + "order": 1, + "page_id": 342, + "element_id": 4805, + "event": "click", + "service": { + "id": 815, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 756, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "field_mappings": [ + { + "field_id": 7253, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7254, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7255, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Ready for review'" + }, + "enabled": true + }, + { + "field_id": 7256, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7257, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7258, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7259, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7260, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7261, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7262, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7263, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7264, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7265, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7266, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7267, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7268, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7269, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + }, + { + "field_id": 7270, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "enabled": false + } + ] + } + }, + { + "id": 509, + "type": "create_row", + "order": 1, + "page_id": 342, + "element_id": 4808, + "event": "submit", + "service": { + "id": 816, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 759, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "field_mappings": [ + { + "field_id": 7282, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4809')" + }, + "enabled": true + }, + { + "field_id": 7283, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.task_id')" + }, + "enabled": true + }, + { + "field_id": 7284, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4810')" + }, + "enabled": true + }, + { + "field_id": 7285, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.605.field_7263.0.id')" + }, + "enabled": true + } + ] + } + }, + { + "id": 510, + "type": "delete_row", + "order": 1, + "page_id": 342, + "element_id": 4798, + "event": "42bdd72f-e6b6-452f-9820-9fb82583a045_click", + "service": { + "id": 817, + "integration_id": 57, + "type": "local_baserow_delete_row", + "sample_data": null, + "table_id": 759, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + }, + { + "id": 511, + "type": "refresh_data_source", + "order": 2, + "page_id": 342, + "element_id": 4802, + "event": "click", + "data_source_id": 605 + }, + { + "id": 512, + "type": "refresh_data_source", + "order": 2, + "page_id": 342, + "element_id": 4805, + "event": "click", + "data_source_id": 605 + }, + { + "id": 513, + "type": "refresh_data_source", + "order": 2, + "page_id": 342, + "element_id": 4808, + "event": "submit", + "data_source_id": 606 + }, + { + "id": 514, + "type": "refresh_data_source", + "order": 2, + "page_id": 342, + "element_id": 4798, + "event": "42bdd72f-e6b6-452f-9820-9fb82583a045_click", + "data_source_id": 606 + } + ], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 343, + "name": "Add task", + "order": 8, + "path": "/add-task", + "path_params": [], + "query_params": [ + { + "name": "project", + "type": "numeric" + }, + { + "name": "milestone", + "type": "numeric" + } + ], + "shared": false, + "elements": [ + { + "id": 4824, + "order": "0.50000000000000000000", + "type": "heading", + "parent_element_id": 4811, + "place_in_container": "2", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 20, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Task'" + }, + "level": 3 + }, + { + "id": 4825, + "order": "0.50000000000000000000", + "type": "text", + "parent_element_id": 4815, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Project'" + }, + "format": "plain" + }, + { + "id": 4826, + "order": "0.59999999999999997780", + "type": "text", + "parent_element_id": 4815, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 1, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 1, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 1, + "style_padding_left": 16, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 1, + "style_padding_right": 16, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffff80", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.610.*.field_7236')" + }, + "format": "plain" + }, + { + "id": 4827, + "order": "0.66666666666666662966", + "type": "text", + "parent_element_id": 4815, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Milestone'" + }, + "format": "plain" + }, + { + "id": 4828, + "order": "0.75000000000000000000", + "type": "text", + "parent_element_id": 4815, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 1, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 1, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 1, + "style_padding_left": 16, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 1, + "style_padding_right": 16, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffff80", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.611.*.field_7248')" + }, + "format": "plain" + }, + { + "id": 4816, + "order": "1.00000000000000000000", + "type": "input_text", + "parent_element_id": 4815, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Name'" + }, + "required": true, + "validation_type": "any", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "is_multiline": false, + "rows": 3, + "input_type": "text" + }, + { + "id": 4829, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Add a new task'" + }, + "level": 2 + }, + { + "id": 4830, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": 4811, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Project'" + }, + "level": 3 + }, + { + "id": 4831, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": 4811, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Milestone'" + }, + "level": 3 + }, + { + "id": 4834, + "order": "1.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4812, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4835, + "order": "1.00000000000000000000", + "type": "link", + "parent_element_id": 4834, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 2, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 343, + "page_parameters": [], + "query_parameters": [ + { + "name": "project", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + }, + { + "name": "milestone", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7236')" + }, + "variant": "link" + }, + { + "id": 4832, + "order": "1.50000000000000000000", + "type": "link", + "parent_element_id": 4814, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 2, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 343, + "page_parameters": [], + "query_parameters": [ + { + "name": "project", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project')" + } + }, + { + "name": "milestone", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7248')" + }, + "variant": "link" + }, + { + "id": 4811, + "order": "2.00000000000000000000", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 50, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 3, + "column_gap": 20, + "alignment": "top" + }, + { + "id": 4812, + "order": "2.00000000000000000000", + "type": "repeat", + "parent_element_id": 4811, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 608, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "orientation": "vertical", + "items_per_row": { + "tablet": 2, + "desktop": 2, + "smartphone": 2 + }, + "horizontal_gap": 0, + "vertical_gap": 20 + }, + { + "id": 4813, + "order": "2.00000000000000000000", + "type": "repeat", + "parent_element_id": 4811, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('page_parameter.project') > 0" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 609, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "orientation": "vertical", + "items_per_row": { + "tablet": 2, + "desktop": 2, + "smartphone": 2 + }, + "horizontal_gap": 0, + "vertical_gap": 20 + }, + { + "id": 4814, + "order": "2.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4813, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4815, + "order": "2.00000000000000000000", + "type": "form_container", + "parent_element_id": 4811, + "place_in_container": "2", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "and(get('page_parameter.project') > 0,get('page_parameter.milestone') > 0)" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 50, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "submit_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Add task'" + }, + "reset_initial_values_post_submission": false + }, + { + "id": 4817, + "order": "2.00000000000000000000", + "type": "input_text", + "parent_element_id": 4815, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Short description'" + }, + "required": true, + "validation_type": "any", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "is_multiline": false, + "rows": 3, + "input_type": "text" + }, + { + "id": 4836, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 4834, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7237')" + }, + "format": "plain" + }, + { + "id": 4818, + "order": "2.50000000000000000000", + "type": "choice", + "parent_element_id": 4815, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Priority'" + }, + "required": true, + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "options": [ + { + "value": "Critical", + "name": "Critical", + "choice_id": 4818 + }, + { + "value": "High", + "name": "High", + "choice_id": 4818 + }, + { + "value": "Medium", + "name": "Medium", + "choice_id": 4818 + }, + { + "value": "Low", + "name": "Low", + "choice_id": 4818 + } + ], + "multiple": false, + "show_as_dropdown": true, + "option_type": "manual", + "formula_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "formula_name": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 4819, + "order": "3.00000000000000000000", + "type": "datetime_picker", + "parent_element_id": 4815, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Start date'" + }, + "required": true, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "date_format": "ISO", + "include_time": false, + "time_format": "24" + }, + { + "id": 4833, + "order": "3.00000000000000000000", + "type": "text", + "parent_element_id": 4814, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7329'),' ',get('current_record.field_7249'))" + }, + "format": "plain" + }, + { + "id": 4820, + "order": "4.00000000000000000000", + "type": "datetime_picker", + "parent_element_id": 4815, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'End date'" + }, + "required": true, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "date_format": "ISO", + "include_time": false, + "time_format": "24" + }, + { + "id": 4821, + "order": "5.00000000000000000000", + "type": "input_text", + "parent_element_id": 4815, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Estimated workload'" + }, + "required": true, + "validation_type": "integer", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "is_multiline": false, + "rows": 3, + "input_type": "text" + }, + { + "id": 4822, + "order": "6.00000000000000000000", + "type": "record_selector", + "parent_element_id": 4815, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 586, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [ + { + "schema_property": "field_7217", + "filterable": false, + "sortable": false, + "searchable": true + } + ], + "required": true, + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Assignee'" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "multiple": false, + "option_name_suffix": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 4823, + "order": "7.00000000000000000000", + "type": "record_selector", + "parent_element_id": 4815, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 586, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [ + { + "schema_property": "field_7217", + "filterable": false, + "sortable": false, + "searchable": true + } + ], + "required": true, + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Reviewer'" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "multiple": false, + "option_name_suffix": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + } + ], + "data_sources": [ + { + "id": 608, + "name": "Available projects", + "order": "1.00000000000000000000", + "service": { + "id": 767, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 753, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7324, + "type": "equal", + "value": { + "mode": "raw", + "version": "0.1", + "formula": "Active" + }, + "value_is_formula": false + }, + { + "field_id": 7287, + "type": "has_value_equal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('user.username')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 609, + "name": "Milestones", + "order": "2.00000000000000000000", + "service": { + "id": 768, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 755, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7250, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 610, + "name": "Project", + "order": "3.00000000000000000000", + "service": { + "id": 769, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 753, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7244, + "type": "equal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 611, + "name": "Milestone", + "order": "4.00000000000000000000", + "service": { + "id": 770, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 755, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7252, + "type": "equal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.milestone')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + } + ], + "workflow_actions": [ + { + "id": 515, + "type": "create_row", + "order": 1, + "page_id": 343, + "element_id": 4815, + "event": "submit", + "service": { + "id": 818, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 756, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "field_mappings": [ + { + "field_id": 7262, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.milestone')" + }, + "enabled": true + }, + { + "field_id": 7263, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project')" + }, + "enabled": true + }, + { + "field_id": 7259, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4819')" + }, + "enabled": true + }, + { + "field_id": 7258, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('user.id')" + }, + "enabled": true + }, + { + "field_id": 7266, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4823')" + }, + "enabled": true + }, + { + "field_id": 7270, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4821')" + }, + "enabled": true + }, + { + "field_id": 7253, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4816')" + }, + "enabled": true + }, + { + "field_id": 7254, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4817')" + }, + "enabled": true + }, + { + "field_id": 7256, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4818')" + }, + "enabled": true + }, + { + "field_id": 7260, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4820')" + }, + "enabled": true + }, + { + "field_id": 7257, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4822')" + }, + "enabled": true + } + ] + } + }, + { + "id": 516, + "type": "open_page", + "order": 2, + "page_id": 343, + "element_id": 4815, + "event": "submit", + "navigation_type": "page", + "navigate_to_page_id": 338, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('previous_action.515.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self" + } + ], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 344, + "name": "Project details", + "order": 9, + "path": "/project-details/:project_id", + "path_params": [ + { + "name": "project_id", + "type": "numeric" + } + ], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 4855, + "order": "0.50000000000000000000", + "type": "simple_container", + "parent_element_id": 4837, + "place_in_container": "2", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 10, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 19, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4843, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.612.field_7236'),' (',get('data_source.612.field_7324'),')')" + }, + "level": 2 + }, + { + "id": 4844, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 4837, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Team'" + }, + "format": "plain" + }, + { + "id": 4845, + "order": "1.00000000000000000000", + "type": "link", + "parent_element_id": 4840, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 352, + "page_parameters": [ + { + "name": "user_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.value')" + }, + "variant": "link" + }, + { + "id": 4856, + "order": "1.00000000000000000000", + "type": "form_container", + "parent_element_id": 4837, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "submit_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Update project'" + }, + "reset_initial_values_post_submission": false + }, + { + "id": 4857, + "order": "1.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4855, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.612.field_7315') >= get('data_source.612.field_7286')" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 4, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 4, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 4, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 4, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4858, + "order": "1.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4837, + "place_in_container": "2", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 10, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4861, + "order": "1.00000000000000000000", + "type": "input_text", + "parent_element_id": 4856, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Description'" + }, + "required": true, + "validation_type": "any", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.612.field_7237')" + }, + "is_multiline": false, + "rows": 3, + "input_type": "text" + }, + { + "id": 4865, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": 4857, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Completion rate'" + }, + "level": 4 + }, + { + "id": 4846, + "order": "1.33333333333333325932", + "type": "heading", + "parent_element_id": 4839, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Open tasks'" + }, + "level": 4 + }, + { + "id": 4866, + "order": "1.33333333333333325932", + "type": "heading", + "parent_element_id": 4859, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Total number of tasks'" + }, + "level": 4 + }, + { + "id": 4867, + "order": "1.33333333333333325932", + "type": "heading", + "parent_element_id": 4860, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Completion rate'" + }, + "level": 4 + }, + { + "id": 4847, + "order": "1.50000000000000000000", + "type": "menu", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "menu": { + "button_font_size": 14, + "button_border_size": 3, + "button_font_weight": "medium", + "button_border_color": "primary", + "button_background_color": "border", + "button_hover_text_color": "ElMaZ", + "button_active_text_color": "ElMaZ", + "button_hover_border_color": "primary", + "button_active_border_color": "primary", + "button_hover_background_color": "V6EVv", + "button_active_background_color": "secondary" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffff80", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "orientation": "horizontal", + "alignment": "center", + "menu_items": [ + { + "id": 146, + "variant": "button", + "type": "link", + "menu_item_order": 0, + "uid": "3c800cfc-4be1-4e85-bc3e-b1b1642dccde", + "name": "Overview", + "navigation_type": "page", + "navigate_to_page_id": 344, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 147, + "variant": "link", + "type": "separator", + "menu_item_order": 1, + "uid": "0a8bde92-3324-4a03-9190-c4dc1d3af0f5", + "name": "Page", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 148, + "variant": "button", + "type": "link", + "menu_item_order": 2, + "uid": "42369e64-dc35-467c-b4aa-18e3c77b08fd", + "name": "Milestones", + "navigation_type": "page", + "navigate_to_page_id": 345, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 149, + "variant": "link", + "type": "separator", + "menu_item_order": 3, + "uid": "2aafee61-fdb2-430e-b24c-4c40020248ec", + "name": "Page 4", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 150, + "variant": "button", + "type": "link", + "menu_item_order": 4, + "uid": "2bff1d71-fa09-4b82-b77c-ee5ba5d9c64b", + "name": "Tasks", + "navigation_type": "page", + "navigate_to_page_id": 346, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'http://pm.localhost:3000/task-details/28#actions'" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 151, + "variant": "link", + "type": "separator", + "menu_item_order": 5, + "uid": "ae343373-28ef-4446-85c3-875285c9363f", + "name": "Page 1", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 152, + "variant": "button", + "type": "link", + "menu_item_order": 6, + "uid": "479aaff1-225d-4ec0-8360-245463905fb6", + "name": "Team", + "navigation_type": "page", + "navigate_to_page_id": 347, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'#messages'" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 153, + "variant": "link", + "type": "separator", + "menu_item_order": 7, + "uid": "744ed306-e6ce-47f7-85c1-2121831c8e73", + "name": "Page 2", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 154, + "variant": "button", + "type": "link", + "menu_item_order": 8, + "uid": "4223f6dc-c72c-4ed8-929a-87692f5c76f0", + "name": "Files", + "navigation_type": "page", + "navigate_to_page_id": 348, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'#files'" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + } + ] + }, + { + "id": 4848, + "order": "1.50000000000000000000", + "type": "heading", + "parent_element_id": 4842, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Completed tasks'" + }, + "level": 4 + }, + { + "id": 4868, + "order": "1.50000000000000000000", + "type": "text", + "parent_element_id": 4857, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 24, + "body_text_color": "success", + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 2, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "concat(round(get('data_source.612.field_7315'),0),'%')" + }, + "format": "plain" + }, + { + "id": 4849, + "order": "1.66666666666666674068", + "type": "text", + "parent_element_id": 4839, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 24, + "body_text_color": "secondary", + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 2, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.612.field_7292')" + }, + "format": "plain" + }, + { + "id": 4869, + "order": "1.66666666666666674068", + "type": "text", + "parent_element_id": 4859, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 24, + "body_text_color": "secondary", + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 2, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.612.field_7298')" + }, + "format": "plain" + }, + { + "id": 4870, + "order": "1.66666666666666674068", + "type": "text", + "parent_element_id": 4860, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 24, + "body_text_color": "error", + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 2, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "concat(round(get('data_source.612.field_7315'),0),'%')" + }, + "format": "plain" + }, + { + "id": 4837, + "order": "2.00000000000000000000", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 50, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 20, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 3, + "column_gap": 60, + "alignment": "top" + }, + { + "id": 4838, + "order": "2.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4837, + "place_in_container": "2", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 10, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 19, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4839, + "order": "2.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4838, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 2, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 2, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 2, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 2, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4840, + "order": "2.00000000000000000000", + "type": "repeat", + "parent_element_id": 4837, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 612, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": "field_7287", + "property_options": [], + "orientation": "vertical", + "items_per_row": { + "tablet": 2, + "desktop": 2, + "smartphone": 2 + }, + "horizontal_gap": 0, + "vertical_gap": 0 + }, + { + "id": 4850, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 4842, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 24, + "body_text_color": "secondary", + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 2, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.612.field_7293')" + }, + "format": "plain" + }, + { + "id": 4859, + "order": "2.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4858, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 2, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 2, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 2, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 2, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4860, + "order": "2.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4855, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.612.field_7315') < get('data_source.612.field_7286')" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 4, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 4, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 4, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 4, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4871, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 4857, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 12, + "body_text_color": "success", + "body_font_weight": "medium" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "concat(round(get('data_source.612.field_7286'),0),'% ELAPSED TIME')" + }, + "format": "plain" + }, + { + "id": 4841, + "order": "3.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4837, + "place_in_container": "2", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 10, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4842, + "order": "3.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4841, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 2, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 2, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 2, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 2, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4851, + "order": "3.00000000000000000000", + "type": "text", + "parent_element_id": 4839, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 12, + "body_text_color": "secondary", + "body_font_weight": "medium" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.612.field_7290'),' hours')" + }, + "format": "plain" + }, + { + "id": 4852, + "order": "3.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Milestones'" + }, + "level": 3 + }, + { + "id": 4872, + "order": "3.00000000000000000000", + "type": "text", + "parent_element_id": 4859, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 12, + "body_text_color": "secondary", + "body_font_weight": "medium" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.612.field_7288'),' hours estimated work')" + }, + "format": "plain" + }, + { + "id": 4873, + "order": "3.00000000000000000000", + "type": "text", + "parent_element_id": 4860, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 12, + "body_text_color": "error", + "body_font_weight": "medium" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "concat(round(get('data_source.612.field_7286'),0),'% ELAPSED TIME')" + }, + "format": "plain" + }, + { + "id": 4862, + "order": "3.50000000000000000000", + "type": "datetime_picker", + "parent_element_id": 4856, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Start date'" + }, + "required": true, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.612.field_7238')" + }, + "date_format": "ISO", + "include_time": false, + "time_format": "24" + }, + { + "id": 4863, + "order": "3.66666666666666651864", + "type": "datetime_picker", + "parent_element_id": 4856, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'End date'" + }, + "required": true, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.612.field_7239')" + }, + "date_format": "ISO", + "include_time": false, + "time_format": "24" + }, + { + "id": 4853, + "order": "4.00000000000000000000", + "type": "text", + "parent_element_id": 4842, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 12, + "body_text_color": "secondary", + "body_font_weight": "medium" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.612.field_7291'),' hours')" + }, + "format": "plain" + }, + { + "id": 4854, + "order": "4.00000000000000000000", + "type": "table", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 613, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "534fc7b7-84aa-4930-863a-25330f4e3536", + "name": "Name", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 345, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [ + { + "name": "milestone_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7248')" + }, + "variant": "link" + } + }, + { + "uid": "17d25e16-f00d-4af7-a103-2590c02a2ff4", + "name": "Status", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7329'),' ',get('current_record.field_7326'))" + } + } + }, + { + "uid": "1ada3129-a017-4f90-a514-be1fd6bfe851", + "name": "Start date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7309')" + } + } + }, + { + "uid": "cd79d8b7-ab5e-407f-b223-d24d12936696", + "name": "End date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7310')" + } + } + }, + { + "uid": "38034bba-ee35-4a2b-87d2-a530ea132ea6", + "name": "Total", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7299'),' / ',get('current_record.field_7289'),' hours')" + } + } + }, + { + "uid": "8187cc02-41a8-4d0b-abcd-91ae6d07cb7d", + "name": "Open", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7295'),' / ',get('current_record.field_7294'),' hours')" + } + } + }, + { + "uid": "3fef9dbc-0bf4-46fe-bf32-99628d4390b9", + "name": "Completed", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7297'),' / ',get('current_record.field_7296'),' hours')" + } + } + }, + { + "uid": "90f95d29-a392-4c27-b42d-50b03181630e", + "name": "Progress (tasks / time)", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "concat(round(get('current_record.field_7317'),0),'% / ',round(get('current_record.field_7320'),0),'%')" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + }, + { + "id": 4864, + "order": "5.00000000000000000000", + "type": "record_selector", + "parent_element_id": 4856, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 586, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [ + { + "schema_property": "field_7217", + "filterable": false, + "sortable": false, + "searchable": true + } + ], + "required": true, + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Project owner'" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.612.field_7240.0.id')" + }, + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "multiple": false, + "option_name_suffix": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + } + ], + "data_sources": [ + { + "id": 612, + "name": "Project details", + "order": "1.00000000000000000000", + "service": { + "id": 771, + "integration_id": 57, + "type": "local_baserow_get_row", + "sample_data": null, + "table_id": 753, + "view_id": null, + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + }, + { + "id": 613, + "name": "Milestones", + "order": "2.00000000000000000000", + "service": { + "id": 772, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 755, + "view_id": null, + "sortings": [ + { + "field_id": 7309, + "order_by": "ASC" + } + ], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7250, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + } + ], + "workflow_actions": [ + { + "id": 517, + "type": "update_row", + "order": 1, + "page_id": 344, + "element_id": 4856, + "event": "submit", + "service": { + "id": 819, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 753, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + }, + "field_mappings": [ + { + "field_id": 7237, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4861')" + }, + "enabled": true + }, + { + "field_id": 7238, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4862')" + }, + "enabled": true + }, + { + "field_id": 7239, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4863')" + }, + "enabled": true + }, + { + "field_id": 7240, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4864')" + }, + "enabled": true + } + ] + } + }, + { + "id": 518, + "type": "refresh_data_source", + "order": 2, + "page_id": 344, + "element_id": 4856, + "event": "submit", + "data_source_id": 612 + } + ], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 345, + "name": "Project milestones", + "order": 10, + "path": "/project-milestones/:project_id", + "path_params": [ + { + "name": "project_id", + "type": "numeric" + } + ], + "query_params": [ + { + "name": "milestone_id", + "type": "numeric" + } + ], + "shared": false, + "elements": [ + { + "id": 4879, + "order": "0.50000000000000000000", + "type": "link", + "parent_element_id": 4874, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_width": "full" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 349, + "page_parameters": [], + "query_parameters": [ + { + "name": "project", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'+ Add new milestone'" + }, + "variant": "link" + }, + { + "id": 4891, + "order": "0.50000000000000000000", + "type": "simple_container", + "parent_element_id": 4874, + "place_in_container": "2", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('page_parameter.milestone_id') > 0" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 10, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 19, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4892, + "order": "0.50000000000000000000", + "type": "form_container", + "parent_element_id": 4874, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('page_parameter.milestone_id') > 0" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "submit_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Update milestone'" + }, + "reset_initial_values_post_submission": false + }, + { + "id": 4880, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.614.field_7236'),' (',get('data_source.614.field_7324'),')')" + }, + "level": 2 + }, + { + "id": 4893, + "order": "1.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4891, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.617.0.field_7317') >= get('data_source.617.0.field_7320')" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 4, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 4, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 4, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 4, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4894, + "order": "1.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4874, + "place_in_container": "2", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('page_parameter.milestone_id') > 0" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 10, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 19, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4895, + "order": "1.00000000000000000000", + "type": "repeat", + "parent_element_id": 4874, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 615, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "orientation": "vertical", + "items_per_row": { + "tablet": 2, + "desktop": 2, + "smartphone": 2 + }, + "horizontal_gap": 0, + "vertical_gap": 20 + }, + { + "id": 4896, + "order": "1.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4895, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4899, + "order": "1.00000000000000000000", + "type": "input_text", + "parent_element_id": 4892, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Name'" + }, + "required": true, + "validation_type": "any", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.617.0.field_7248')" + }, + "is_multiline": false, + "rows": 3, + "input_type": "text" + }, + { + "id": 4901, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": 4893, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Completion rate'" + }, + "level": 4 + }, + { + "id": 4902, + "order": "1.00000000000000000000", + "type": "link", + "parent_element_id": 4896, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 2, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 345, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [ + { + "name": "milestone_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7248')" + }, + "variant": "link" + }, + { + "id": 4881, + "order": "1.33333333333333325932", + "type": "heading", + "parent_element_id": 4876, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Open tasks'" + }, + "level": 4 + }, + { + "id": 4903, + "order": "1.33333333333333325932", + "type": "heading", + "parent_element_id": 4897, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Total number of tasks'" + }, + "level": 4 + }, + { + "id": 4904, + "order": "1.33333333333333325932", + "type": "heading", + "parent_element_id": 4898, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Completion rate'" + }, + "level": 4 + }, + { + "id": 4882, + "order": "1.50000000000000000000", + "type": "menu", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "menu": { + "button_font_size": 14, + "button_border_size": 3, + "button_font_weight": "medium", + "button_border_color": "primary", + "button_background_color": "border", + "button_hover_text_color": "ElMaZ", + "button_active_text_color": "ElMaZ", + "button_hover_border_color": "primary", + "button_active_border_color": "primary", + "button_hover_background_color": "V6EVv", + "button_active_background_color": "secondary" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffff80", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "orientation": "horizontal", + "alignment": "center", + "menu_items": [ + { + "id": 155, + "variant": "button", + "type": "link", + "menu_item_order": 0, + "uid": "00c0b28c-bf94-480d-9427-f6d91e42d6d3", + "name": "Overview", + "navigation_type": "page", + "navigate_to_page_id": 344, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 156, + "variant": "link", + "type": "separator", + "menu_item_order": 1, + "uid": "63ba8126-6820-435f-90c3-498ad729a39d", + "name": "Page", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 157, + "variant": "button", + "type": "link", + "menu_item_order": 2, + "uid": "dbcc40d2-0231-446f-9aec-75039cc96b53", + "name": "Milestones", + "navigation_type": "page", + "navigate_to_page_id": 345, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 158, + "variant": "link", + "type": "separator", + "menu_item_order": 3, + "uid": "f5aba782-69fb-4ac7-8674-3eac6de091a4", + "name": "Page 4", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 159, + "variant": "button", + "type": "link", + "menu_item_order": 4, + "uid": "0d778e32-e06e-4fe5-a592-72e0e31c1962", + "name": "Tasks", + "navigation_type": "page", + "navigate_to_page_id": 346, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'http://pm.localhost:3000/task-details/28#actions'" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 160, + "variant": "link", + "type": "separator", + "menu_item_order": 5, + "uid": "8c24642c-0f13-4876-a586-61f517ac5314", + "name": "Page 1", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 161, + "variant": "button", + "type": "link", + "menu_item_order": 6, + "uid": "b5eaef33-8eb9-4018-a94d-75c9728726bc", + "name": "Team", + "navigation_type": "page", + "navigate_to_page_id": 347, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'#messages'" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 162, + "variant": "link", + "type": "separator", + "menu_item_order": 7, + "uid": "73b1ea02-4a5a-48fb-a567-3f75ab94c1bc", + "name": "Page 2", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 163, + "variant": "button", + "type": "link", + "menu_item_order": 8, + "uid": "20f6d901-50ff-4e79-9544-0fcb73a4ecf4", + "name": "Files", + "navigation_type": "page", + "navigate_to_page_id": 348, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'#files'" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + } + ] + }, + { + "id": 4883, + "order": "1.50000000000000000000", + "type": "heading", + "parent_element_id": 4878, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Completed tasks'" + }, + "level": 4 + }, + { + "id": 4905, + "order": "1.50000000000000000000", + "type": "text", + "parent_element_id": 4893, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 24, + "body_text_color": "success", + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 2, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "concat(round(get('data_source.617.0.field_7317'),0),'%')" + }, + "format": "plain" + }, + { + "id": 4884, + "order": "1.66666666666666674068", + "type": "text", + "parent_element_id": 4876, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 24, + "body_text_color": "secondary", + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.617.0.field_7295')" + }, + "format": "plain" + }, + { + "id": 4906, + "order": "1.66666666666666674068", + "type": "text", + "parent_element_id": 4897, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 24, + "body_text_color": "secondary", + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 2, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.617.0.field_7299')" + }, + "format": "plain" + }, + { + "id": 4907, + "order": "1.66666666666666674068", + "type": "text", + "parent_element_id": 4898, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 24, + "body_text_color": "error", + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 2, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "concat(round(get('data_source.617.0.field_7317'),0),'%')" + }, + "format": "plain" + }, + { + "id": 4874, + "order": "2.00000000000000000000", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 50, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 20, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 3, + "column_gap": 60, + "alignment": "top" + }, + { + "id": 4875, + "order": "2.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4874, + "place_in_container": "2", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('page_parameter.milestone_id') > 0" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 10, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 19, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4876, + "order": "2.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4875, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 2, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 2, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 2, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 2, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4885, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 4878, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 24, + "body_text_color": "secondary", + "body_font_weight": "bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.617.0.field_7297')" + }, + "format": "plain" + }, + { + "id": 4897, + "order": "2.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4894, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 2, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 2, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 2, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 2, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4898, + "order": "2.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4891, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('data_source.617.0.field_7317') < get('data_source.617.0.field_7320')" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 4, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 4, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 4, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 4, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4900, + "order": "2.00000000000000000000", + "type": "input_text", + "parent_element_id": 4892, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Description'" + }, + "required": true, + "validation_type": "any", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.617.0.field_7249')" + }, + "is_multiline": false, + "rows": 3, + "input_type": "text" + }, + { + "id": 4908, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 4893, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 12, + "body_text_color": "success", + "body_font_weight": "medium" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "concat(round(get('data_source.617.0.field_7320'),0),'% elapsed time')" + }, + "format": "plain" + }, + { + "id": 4909, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 4896, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7249')" + }, + "format": "plain" + }, + { + "id": 4877, + "order": "3.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4874, + "place_in_container": "2", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('page_parameter.milestone_id') > 0" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 10, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4878, + "order": "3.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4877, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 2, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 2, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 2, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 2, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4886, + "order": "3.00000000000000000000", + "type": "text", + "parent_element_id": 4876, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 12, + "body_text_color": "secondary", + "body_font_weight": "medium" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.617.0.field_7294'),' hours estimated work')" + }, + "format": "plain" + }, + { + "id": 4887, + "order": "3.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Tasks'" + }, + "level": 3 + }, + { + "id": 4910, + "order": "3.00000000000000000000", + "type": "text", + "parent_element_id": 4897, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 12, + "body_text_color": "secondary", + "body_font_weight": "medium" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.617.0.field_7289'),' hours estimated work')" + }, + "format": "plain" + }, + { + "id": 4911, + "order": "3.00000000000000000000", + "type": "text", + "parent_element_id": 4892, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Status'" + }, + "format": "plain" + }, + { + "id": 4912, + "order": "3.00000000000000000000", + "type": "text", + "parent_element_id": 4898, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 12, + "body_text_color": "error", + "body_font_weight": "medium" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "concat(round(get('data_source.617.0.field_7320'),0),'% elapsed time')" + }, + "format": "plain" + }, + { + "id": 4913, + "order": "3.33333333333333348136", + "type": "text", + "parent_element_id": 4892, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 1, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 1, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 1, + "style_padding_left": 16, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 1, + "style_padding_right": 16, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffff80", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.617.0.field_7329'),' ',get('data_source.617.0.field_7326'))" + }, + "format": "plain" + }, + { + "id": 4888, + "order": "3.50000000000000000000", + "type": "link", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('page_parameter.milestone_id') > 0" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 343, + "page_parameters": [], + "query_parameters": [ + { + "name": "project", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + }, + { + "name": "milestone", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.milestone_id')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'+ Create new task'" + }, + "variant": "link" + }, + { + "id": 4914, + "order": "3.50000000000000000000", + "type": "text", + "parent_element_id": 4892, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Start date'" + }, + "format": "plain" + }, + { + "id": 4889, + "order": "4.00000000000000000000", + "type": "text", + "parent_element_id": 4878, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 12, + "body_text_color": "secondary", + "body_font_weight": "medium" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.617.0.field_7296'),' hours estimated work')" + }, + "format": "plain" + }, + { + "id": 4890, + "order": "4.00000000000000000000", + "type": "table", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('page_parameter.milestone_id') > 0" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 616, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "6afa1de5-8e8c-475a-941b-c5c56d051ff0", + "name": "Icon", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7321'),' ',get('current_record.field_7322'),' ',get('current_record.field_7330'),' ')" + } + } + }, + { + "uid": "d9d45de2-6c3a-4500-be9e-fbd7a02e62de", + "name": "Name", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 338, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7253')" + }, + "variant": "link" + } + }, + { + "uid": "fe6653ed-59a8-44d7-af7d-7156eaa31fc1", + "name": "Status", + "type": "tags", + "styles": {}, + "config": { + "values": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7255.value')" + }, + "colors_is_formula": true, + "colors": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7255.color')" + } + } + }, + { + "uid": "82eb5d4f-5a20-45cd-af94-1dd612d2fe6b", + "name": "Priority", + "type": "tags", + "styles": {}, + "config": { + "values": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7256.value')" + }, + "colors_is_formula": true, + "colors": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7256.color')" + } + } + }, + { + "uid": "8ffa9e4b-bbb1-48ba-823a-7b6e215cfd87", + "name": "Assignee", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 352, + "page_parameters": [ + { + "name": "user_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7257.0.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7257.0.value')" + }, + "variant": "link" + } + }, + { + "uid": "61ffba8d-ed57-4c62-a9e9-3fed24fdcd42", + "name": "Start date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7259')" + } + } + }, + { + "uid": "4f58e489-85c2-4945-8761-d5ed60fc87ec", + "name": "Due date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7260')" + } + } + }, + { + "uid": "8c90c3aa-5a97-4e1b-b482-751ea5dc031e", + "name": "Estimated workload", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7270'),' hours')" + } + } + }, + { + "uid": "ed41ab06-509d-4d95-8b0a-a9133b2a5b12", + "name": "Registered workload", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "concat(round(get('current_record.field_7323') / 3600,0),' hours')" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + }, + { + "id": 4915, + "order": "4.50000000000000000000", + "type": "text", + "parent_element_id": 4892, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 1, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 1, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 1, + "style_padding_left": 16, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 1, + "style_padding_right": 16, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffff80", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.617.0.field_7309')" + }, + "format": "plain" + }, + { + "id": 4916, + "order": "5.00000000000000000000", + "type": "text", + "parent_element_id": 4892, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'End date'" + }, + "format": "plain" + }, + { + "id": 4917, + "order": "5.50000000000000000000", + "type": "text", + "parent_element_id": 4892, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 1, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 1, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 1, + "style_padding_left": 16, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 1, + "style_padding_right": 16, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffff80", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.617.0.field_7310')" + }, + "format": "plain" + } + ], + "data_sources": [ + { + "id": 614, + "name": "Project details", + "order": "1.00000000000000000000", + "service": { + "id": 773, + "integration_id": 57, + "type": "local_baserow_get_row", + "sample_data": null, + "table_id": 753, + "view_id": null, + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + }, + { + "id": 615, + "name": "Milestones", + "order": "2.00000000000000000000", + "service": { + "id": 774, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 755, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7250, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 616, + "name": "Milestone tasks", + "order": "4.00000000000000000000", + "service": { + "id": 775, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 756, + "view_id": null, + "sortings": [ + { + "field_id": 7259, + "order_by": "ASC" + } + ], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7262, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.milestone_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 617, + "name": "Milestone details", + "order": "5.00000000000000000000", + "service": { + "id": 776, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 755, + "view_id": 3355, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7252, + "type": "equal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.milestone_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + } + ], + "workflow_actions": [ + { + "id": 519, + "type": "update_row", + "order": 1, + "page_id": 345, + "element_id": 4892, + "event": "submit", + "service": { + "id": 820, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 755, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.milestone_id')" + }, + "field_mappings": [ + { + "field_id": 7248, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4899')" + }, + "enabled": true + }, + { + "field_id": 7249, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4900')" + }, + "enabled": true + } + ] + } + }, + { + "id": 520, + "type": "refresh_data_source", + "order": 2, + "page_id": 345, + "element_id": 4892, + "event": "submit", + "data_source_id": 617 + } + ], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 346, + "name": "Project tasks", + "order": 11, + "path": "/project-tasks/:project_id", + "path_params": [ + { + "name": "project_id", + "type": "numeric" + } + ], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 4918, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.618.field_7236'),' (',get('data_source.618.field_7324'),')')" + }, + "level": 2 + }, + { + "id": 4919, + "order": "1.50000000000000000000", + "type": "menu", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "menu": { + "button_font_size": 14, + "button_border_size": 3, + "button_font_weight": "medium", + "button_border_color": "primary", + "button_background_color": "border", + "button_hover_text_color": "ElMaZ", + "button_active_text_color": "ElMaZ", + "button_hover_border_color": "primary", + "button_active_border_color": "primary", + "button_hover_background_color": "V6EVv", + "button_active_background_color": "secondary" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffff80", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "orientation": "horizontal", + "alignment": "center", + "menu_items": [ + { + "id": 164, + "variant": "button", + "type": "link", + "menu_item_order": 0, + "uid": "80733c4d-b46f-4a53-a430-7f49d4d38177", + "name": "Overview", + "navigation_type": "page", + "navigate_to_page_id": 344, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 165, + "variant": "link", + "type": "separator", + "menu_item_order": 1, + "uid": "46ee4bef-f658-461a-a065-cc7adab312ef", + "name": "Page", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 166, + "variant": "button", + "type": "link", + "menu_item_order": 2, + "uid": "d657711e-512e-4670-bdd0-98a6cb905d30", + "name": "Milestones", + "navigation_type": "page", + "navigate_to_page_id": 345, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 167, + "variant": "link", + "type": "separator", + "menu_item_order": 3, + "uid": "5c6dc2ac-595a-496b-bcd1-44ea15a584fd", + "name": "Page 4", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 168, + "variant": "button", + "type": "link", + "menu_item_order": 4, + "uid": "845e4ee6-27b8-47b1-a470-369d2093406b", + "name": "Tasks", + "navigation_type": "page", + "navigate_to_page_id": 346, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'http://pm.localhost:3000/task-details/28#actions'" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 169, + "variant": "link", + "type": "separator", + "menu_item_order": 5, + "uid": "a4e83213-cd59-43b7-832c-55a0d5cdb8e0", + "name": "Page 1", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 170, + "variant": "button", + "type": "link", + "menu_item_order": 6, + "uid": "34bcb0e9-8a1f-4f54-841c-f0d31da02308", + "name": "Team", + "navigation_type": "page", + "navigate_to_page_id": 347, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'#messages'" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 171, + "variant": "link", + "type": "separator", + "menu_item_order": 7, + "uid": "52b50f41-4f5a-4af3-9a29-43cfa95211e5", + "name": "Page 2", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 172, + "variant": "button", + "type": "link", + "menu_item_order": 8, + "uid": "3c4faccc-0777-46ec-b18c-cc758aff281e", + "name": "Files", + "navigation_type": "page", + "navigate_to_page_id": 348, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'#files'" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + } + ] + }, + { + "id": 4920, + "order": "2.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 50, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'All tasks for the project'" + }, + "level": 3 + }, + { + "id": 4921, + "order": "4.00000000000000000000", + "type": "table", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 4, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 619, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "917f4e32-6aa0-494d-8475-bf7fac5155cb", + "name": "Icon", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7321'),' ',get('current_record.field_7322'),' ',get('current_record.field_7330'))" + } + } + }, + { + "uid": "dfb9a302-463e-4506-934b-4271c06daa7e", + "name": "Name", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 338, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7253')" + }, + "variant": "link" + } + }, + { + "uid": "266ea3e4-1daf-4e34-893f-931c9a51aef4", + "name": "Status", + "type": "tags", + "styles": {}, + "config": { + "values": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7255.value')" + }, + "colors_is_formula": true, + "colors": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7255.color')" + } + } + }, + { + "uid": "c8d04ae6-60b4-42ba-86ac-397b0362e08a", + "name": "Priority", + "type": "tags", + "styles": {}, + "config": { + "values": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7256.value')" + }, + "colors_is_formula": true, + "colors": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7256.color')" + } + } + }, + { + "uid": "d75b6619-983b-46f9-af39-f0ba86c374d7", + "name": "Assignee", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 352, + "page_parameters": [ + { + "name": "user_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7257.0.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7257.0.value')" + }, + "variant": "link" + } + }, + { + "uid": "07f91e49-b14d-481e-964f-4f5046b18f51", + "name": "Start date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7259')" + } + } + }, + { + "uid": "67c07da6-fa01-41bd-bcee-90ff100508f2", + "name": "Due date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7260')" + } + } + }, + { + "uid": "9e3eeb50-5a91-46a4-8b69-dae8f7a5dff9", + "name": "Milestone", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 345, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [ + { + "name": "milestone_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7334.0.id')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7334.0.value')" + }, + "variant": "link" + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + } + ], + "data_sources": [ + { + "id": 618, + "name": "Project details", + "order": "1.00000000000000000000", + "service": { + "id": 777, + "integration_id": 57, + "type": "local_baserow_get_row", + "sample_data": null, + "table_id": 753, + "view_id": null, + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + }, + { + "id": 619, + "name": "Tasks", + "order": "2.00000000000000000000", + "service": { + "id": 778, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 756, + "view_id": 3357, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7263, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + } + ], + "workflow_actions": [], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 347, + "name": "Project team", + "order": 12, + "path": "/project-team/:project_id", + "path_params": [ + { + "name": "project_id", + "type": "numeric" + } + ], + "query_params": [ + { + "name": "user_id", + "type": "numeric" + }, + { + "name": "member_id", + "type": "numeric" + } + ], + "shared": false, + "elements": [ + { + "id": 4926, + "order": "0.50000000000000000000", + "type": "simple_container", + "parent_element_id": 4922, + "place_in_container": "2", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('page_parameter.user_id') > 0 && get('page_parameter.member_id') > 0" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4924, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.620.field_7236'),' (',get('data_source.620.field_7324'),')')" + }, + "level": 2 + }, + { + "id": 4927, + "order": "1.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4923, + "place_in_container": null, + "css_classes": "flex__container", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4928, + "order": "1.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4927, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4929, + "order": "1.00000000000000000000", + "type": "repeat", + "parent_element_id": 4922, + "place_in_container": "1", + "css_classes": "repeat__container", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 622, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "orientation": "vertical", + "items_per_row": { + "tablet": 2, + "desktop": 2, + "smartphone": 2 + }, + "horizontal_gap": 0, + "vertical_gap": 20 + }, + { + "id": 4930, + "order": "1.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4922, + "place_in_container": "2", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('page_parameter.user_id') > 0 && get('page_parameter.member_id') > 0" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4940, + "order": "1.00000000000000000000", + "type": "image", + "parent_element_id": 4928, + "place_in_container": null, + "css_classes": "round-image", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 4, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "image_source_type": "url", + "image_file_id": null, + "image_url": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7220.0.url')" + }, + "alt_text": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 4941, + "order": "1.00000000000000000000", + "type": "text", + "parent_element_id": 4933, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 10, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7217'),' (',get('current_record.field_7221.0.value'),')')" + }, + "format": "plain" + }, + { + "id": 4942, + "order": "1.00000000000000000000", + "type": "link", + "parent_element_id": 4935, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 338, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7333'),' (',get('current_record.field_7255.value'),')')" + }, + "variant": "link" + }, + { + "id": 4943, + "order": "1.00000000000000000000", + "type": "link", + "parent_element_id": 4926, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "link": { + "link_font_size": 18, + "link_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 337, + "page_parameters": [], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.624.*.field_7217')" + }, + "variant": "link" + }, + { + "id": 4925, + "order": "1.50000000000000000000", + "type": "menu", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "menu": { + "button_font_size": 14, + "button_border_size": 3, + "button_font_weight": "medium", + "button_border_color": "primary", + "button_background_color": "border", + "button_hover_text_color": "ElMaZ", + "button_active_text_color": "ElMaZ", + "button_hover_border_color": "primary", + "button_active_border_color": "primary", + "button_hover_background_color": "V6EVv", + "button_active_background_color": "secondary" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffff80", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "orientation": "horizontal", + "alignment": "center", + "menu_items": [ + { + "id": 173, + "variant": "button", + "type": "link", + "menu_item_order": 0, + "uid": "a86cf2a7-d56b-4000-85cc-cf7848a9174d", + "name": "Overview", + "navigation_type": "page", + "navigate_to_page_id": 344, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 174, + "variant": "link", + "type": "separator", + "menu_item_order": 1, + "uid": "b7f1bedd-0f7a-47ee-91b7-fd0945822b7d", + "name": "Page", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 175, + "variant": "button", + "type": "link", + "menu_item_order": 2, + "uid": "950ba738-bd38-4c67-bb0d-703d4557deb3", + "name": "Milestones", + "navigation_type": "page", + "navigate_to_page_id": 345, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 176, + "variant": "link", + "type": "separator", + "menu_item_order": 3, + "uid": "e0c8f72f-af67-4402-ba22-500b32f0ec8a", + "name": "Page 4", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 177, + "variant": "button", + "type": "link", + "menu_item_order": 4, + "uid": "17d08610-a198-41de-9540-40e2cbf9f687", + "name": "Tasks", + "navigation_type": "page", + "navigate_to_page_id": 346, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'http://pm.localhost:3000/task-details/28#actions'" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 178, + "variant": "link", + "type": "separator", + "menu_item_order": 5, + "uid": "428220f4-c9f4-41bb-88bb-d3ca9dbe087a", + "name": "Page 1", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 179, + "variant": "button", + "type": "link", + "menu_item_order": 6, + "uid": "e2e051a0-5b3a-4628-b462-f29db5df69d1", + "name": "Team", + "navigation_type": "page", + "navigate_to_page_id": 347, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'#messages'" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 180, + "variant": "link", + "type": "separator", + "menu_item_order": 7, + "uid": "10a5e1b3-dfe8-44fc-aadb-04d37b8b2b53", + "name": "Page 2", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 181, + "variant": "button", + "type": "link", + "menu_item_order": 8, + "uid": "6b4e270e-5139-4994-a471-c8ca197c0e67", + "name": "Files", + "navigation_type": "page", + "navigate_to_page_id": 348, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'#files'" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + } + ] + }, + { + "id": 4931, + "order": "1.50000000000000000000", + "type": "simple_container", + "parent_element_id": 4929, + "place_in_container": null, + "css_classes": "flex__container", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('page_parameter.member_id') != get('current_record.id')" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 2, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4932, + "order": "1.50000000000000000000", + "type": "simple_container", + "parent_element_id": 4931, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4944, + "order": "1.50000000000000000000", + "type": "text", + "parent_element_id": 4934, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 10, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7247.0.value'),' (',get('current_record.field_7303.0.value'),')')" + }, + "format": "plain" + }, + { + "id": 4922, + "order": "2.00000000000000000000", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 50, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 50, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 3, + "column_gap": 60, + "alignment": "top" + }, + { + "id": 4923, + "order": "2.00000000000000000000", + "type": "repeat", + "parent_element_id": 4922, + "place_in_container": "0", + "css_classes": "repeat__container", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 621, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "orientation": "vertical", + "items_per_row": { + "tablet": 2, + "desktop": 2, + "smartphone": 2 + }, + "horizontal_gap": 0, + "vertical_gap": 20 + }, + { + "id": 4933, + "order": "2.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4927, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4945, + "order": "2.00000000000000000000", + "type": "image", + "parent_element_id": 4932, + "place_in_container": null, + "css_classes": "round-image", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 4, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "image_source_type": "url", + "image_file_id": null, + "image_url": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7305.0.url')" + }, + "alt_text": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 4946, + "order": "2.00000000000000000000", + "type": "button", + "parent_element_id": 4933, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_text_color": "ElMaZ", + "button_background_color": "success", + "button_hover_text_color": "ElMaZ", + "button_active_text_color": "ElMaZ", + "button_hover_background_color": "#4a5e2d", + "button_active_background_color": "success" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Add to project team'" + } + }, + { + "id": 4947, + "order": "2.00000000000000000000", + "type": "heading", + "parent_element_id": 4930, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 20, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Tasks assigned'" + }, + "level": 4 + }, + { + "id": 4948, + "order": "2.00000000000000000000", + "type": "button", + "parent_element_id": 4926, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "button": { + "button_text_color": "ElMaZ", + "button_background_color": "error", + "button_hover_text_color": "ElMaZ", + "button_active_text_color": "ElMaZ", + "button_hover_background_color": "#b61e0a", + "button_active_background_color": "error" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Delete from project team'" + } + }, + { + "id": 4949, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 4937, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_text_color": "ElMaZ", + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 10, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7247.0.value'),' (',get('current_record.field_7303.0.value'),')')" + }, + "format": "plain" + }, + { + "id": 4950, + "order": "2.00000000000000000000", + "type": "link", + "parent_element_id": 4938, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 338, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7333'),' (',get('current_record.field_7255.value'),')')" + }, + "variant": "link" + }, + { + "id": 4958, + "order": "2.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4936, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4934, + "order": "3.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4931, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4935, + "order": "3.00000000000000000000", + "type": "repeat", + "parent_element_id": 4930, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 623, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "orientation": "vertical", + "items_per_row": { + "tablet": 2, + "desktop": 2, + "smartphone": 2 + }, + "horizontal_gap": 0, + "vertical_gap": 0 + }, + { + "id": 4936, + "order": "3.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4929, + "place_in_container": null, + "css_classes": "flex__container", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('page_parameter.member_id') = get('current_record.id')" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 2, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 0, + "style_background": "color", + "style_background_color": "secondary", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4951, + "order": "3.00000000000000000000", + "type": "text", + "parent_element_id": 4934, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7319')" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_text_color": "secondary" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 10, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'PROJECT OWNER'" + }, + "format": "plain" + }, + { + "id": 4952, + "order": "3.00000000000000000000", + "type": "link", + "parent_element_id": 4939, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 338, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7333'),' (',get('current_record.field_7255.value'),')')" + }, + "variant": "link" + }, + { + "id": 4959, + "order": "3.00000000000000000000", + "type": "image", + "parent_element_id": 4958, + "place_in_container": null, + "css_classes": "round-image", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 4, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "image_source_type": "url", + "image_file_id": null, + "image_url": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7305.0.url')" + }, + "alt_text": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 4953, + "order": "3.50000000000000000000", + "type": "text", + "parent_element_id": 4937, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7319')" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_text_color": "ElMaZ" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 10, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'PROJECT OWNER'" + }, + "format": "plain" + }, + { + "id": 4937, + "order": "4.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4936, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4954, + "order": "4.00000000000000000000", + "type": "heading", + "parent_element_id": 4930, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 20, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Tasks reviewed'" + }, + "level": 4 + }, + { + "id": 4955, + "order": "4.00000000000000000000", + "type": "link", + "parent_element_id": 4934, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 10, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 347, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [ + { + "name": "user_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7247.0.id')" + } + }, + { + "name": "member_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Show tasks'" + }, + "variant": "button" + }, + { + "id": 4938, + "order": "5.00000000000000000000", + "type": "repeat", + "parent_element_id": 4930, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 625, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "orientation": "vertical", + "items_per_row": { + "tablet": 2, + "desktop": 2, + "smartphone": 2 + }, + "horizontal_gap": 0, + "vertical_gap": 0 + }, + { + "id": 4956, + "order": "5.00000000000000000000", + "type": "link", + "parent_element_id": 4937, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 10, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 347, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [ + { + "name": "user_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7247.0.id')" + } + }, + { + "name": "member_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Show tasks'" + }, + "variant": "button" + }, + { + "id": 4957, + "order": "6.00000000000000000000", + "type": "heading", + "parent_element_id": 4930, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 20, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Tasks created'" + }, + "level": 4 + }, + { + "id": 4939, + "order": "7.00000000000000000000", + "type": "repeat", + "parent_element_id": 4930, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 626, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "orientation": "vertical", + "items_per_row": { + "tablet": 2, + "desktop": 2, + "smartphone": 2 + }, + "horizontal_gap": 0, + "vertical_gap": 0 + } + ], + "data_sources": [ + { + "id": 620, + "name": "Project details", + "order": "1.00000000000000000000", + "service": { + "id": 779, + "integration_id": 57, + "type": "local_baserow_get_row", + "sample_data": null, + "table_id": 753, + "view_id": null, + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + }, + { + "id": 621, + "name": "Users outside the project", + "order": "2.00000000000000000000", + "service": { + "id": 780, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 751, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7318, + "type": "has_not_value_equal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 622, + "name": "Project members", + "order": "3.00000000000000000000", + "service": { + "id": 781, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 754, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7246, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 623, + "name": "Assigned tasks", + "order": "4.00000000000000000000", + "service": { + "id": 782, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 756, + "view_id": 3357, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7263, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + }, + "value_is_formula": true + }, + { + "field_id": 7257, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.user_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 624, + "name": "Selected member", + "order": "5.00000000000000000000", + "service": { + "id": 783, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 751, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7231, + "type": "equal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.user_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 625, + "name": "Reviewed tasks", + "order": "6.00000000000000000000", + "service": { + "id": 784, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 756, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7263, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + }, + "value_is_formula": true + }, + { + "field_id": 7266, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.user_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 626, + "name": "Created tasks", + "order": "7.00000000000000000000", + "service": { + "id": 785, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 756, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7263, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + }, + "value_is_formula": true + }, + { + "field_id": 7258, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.user_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + } + ], + "workflow_actions": [ + { + "id": 521, + "type": "create_row", + "order": 1, + "page_id": 347, + "element_id": 4946, + "event": "click", + "service": { + "id": 821, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 754, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "field_mappings": [ + { + "field_id": 7246, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + }, + "enabled": true + }, + { + "field_id": 7247, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + }, + "enabled": true + } + ] + } + }, + { + "id": 522, + "type": "delete_row", + "order": 1, + "page_id": 347, + "element_id": 4948, + "event": "click", + "service": { + "id": 822, + "integration_id": 57, + "type": "local_baserow_delete_row", + "sample_data": null, + "table_id": 754, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.member_id')" + } + } + }, + { + "id": 523, + "type": "refresh_data_source", + "order": 2, + "page_id": 347, + "element_id": 4946, + "event": "click", + "data_source_id": 621 + }, + { + "id": 524, + "type": "open_page", + "order": 2, + "page_id": 347, + "element_id": 4948, + "event": "click", + "navigation_type": "page", + "navigate_to_page_id": 347, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [ + { + "name": "user_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "name": "member_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self" + }, + { + "id": 525, + "type": "refresh_data_source", + "order": 3, + "page_id": 347, + "element_id": 4946, + "event": "click", + "data_source_id": 622 + } + ], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 348, + "name": "Project files", + "order": 13, + "path": "/project-files/:project_id", + "path_params": [ + { + "name": "project_id", + "type": "numeric" + } + ], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 4961, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('data_source.627.field_7236'),' (',get('data_source.627.field_7324'),')')" + }, + "level": 2 + }, + { + "id": 4962, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": 4960, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Files related to the project'" + }, + "level": 4 + }, + { + "id": 4967, + "order": "1.00000000000000000000", + "type": "form_container", + "parent_element_id": 4960, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "submit_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Add file'" + }, + "reset_initial_values_post_submission": true + }, + { + "id": 4968, + "order": "1.00000000000000000000", + "type": "input_text", + "parent_element_id": 4967, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Name'" + }, + "required": true, + "validation_type": "any", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "is_multiline": false, + "rows": 3, + "input_type": "text" + }, + { + "id": 4963, + "order": "1.50000000000000000000", + "type": "menu", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "menu": { + "button_font_size": 14, + "button_border_size": 3, + "button_font_weight": "medium", + "button_border_color": "primary", + "button_background_color": "border", + "button_hover_text_color": "ElMaZ", + "button_active_text_color": "ElMaZ", + "button_hover_border_color": "primary", + "button_active_border_color": "primary", + "button_hover_background_color": "V6EVv", + "button_active_background_color": "secondary" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffff80", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "orientation": "horizontal", + "alignment": "center", + "menu_items": [ + { + "id": 182, + "variant": "button", + "type": "link", + "menu_item_order": 0, + "uid": "ecf07389-28f7-4969-bebb-a06437bffc01", + "name": "Overview", + "navigation_type": "page", + "navigate_to_page_id": 344, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 183, + "variant": "link", + "type": "separator", + "menu_item_order": 1, + "uid": "cfdd2263-84db-41ab-a658-a0627d398187", + "name": "Page", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 184, + "variant": "button", + "type": "link", + "menu_item_order": 2, + "uid": "7b999c4b-297f-422e-b76c-22a69d14b8c5", + "name": "Milestones", + "navigation_type": "page", + "navigate_to_page_id": 345, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 185, + "variant": "link", + "type": "separator", + "menu_item_order": 3, + "uid": "6010261e-d9b5-4f56-85ce-c395511505db", + "name": "Page 4", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 186, + "variant": "button", + "type": "link", + "menu_item_order": 4, + "uid": "268fb09d-94df-4d94-a5bf-2c9fa5d99511", + "name": "Tasks", + "navigation_type": "page", + "navigate_to_page_id": 346, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'http://pm.localhost:3000/task-details/28#actions'" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 187, + "variant": "link", + "type": "separator", + "menu_item_order": 5, + "uid": "667a7cb9-818c-475d-8d4d-8c6703043619", + "name": "Page 1", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 188, + "variant": "button", + "type": "link", + "menu_item_order": 6, + "uid": "c289dbde-8475-403b-957a-b9dd7001dc17", + "name": "Team", + "navigation_type": "page", + "navigate_to_page_id": 347, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'#messages'" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 189, + "variant": "link", + "type": "separator", + "menu_item_order": 7, + "uid": "5463be27-e75b-475e-9636-91d15c3f1db2", + "name": "Page 2", + "navigation_type": "page", + "navigate_to_page_id": null, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "page_parameters": [], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + }, + { + "id": 190, + "variant": "button", + "type": "link", + "menu_item_order": 8, + "uid": "135a3bec-daba-4a6b-94c4-ef87202837d8", + "name": "Files", + "navigation_type": "page", + "navigate_to_page_id": 348, + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "'#files'" + }, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + ], + "query_parameters": [], + "parent_menu_item": null, + "target": "self", + "children": [] + } + ] + }, + { + "id": 4960, + "order": "2.00000000000000000000", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 50, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 50, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 60, + "alignment": "top" + }, + { + "id": 4964, + "order": "2.00000000000000000000", + "type": "table", + "parent_element_id": 4960, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 628, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "d3ef3ec7-5617-49c6-9548-bfb179e8a8a5", + "name": "Name", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7282')" + } + } + }, + { + "uid": "e99480a7-fe14-4061-9ca7-4d21ec1eeed4", + "name": "File", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "custom", + "navigate_to_page_id": null, + "page_parameters": [], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7284.0.url')" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7284.0.visible_name')" + }, + "variant": "link" + } + }, + { + "uid": "853190a8-9fb8-4ee5-a021-7234c8c04c79", + "name": "", + "type": "button", + "styles": { + "cell": { + "button_background_color": "transparent", + "button_hover_background_color": "transparent", + "button_active_background_color": "transparent" + } + }, + "config": { + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'\u274c'" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + }, + { + "id": 4969, + "order": "2.00000000000000000000", + "type": "input_file", + "parent_element_id": 4967, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Select file'" + }, + "required": true, + "multiple": false, + "default_name": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "help_text": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "max_filesize": 5, + "allowed_filetypes": [], + "preview": false + }, + { + "id": 4965, + "order": "3.00000000000000000000", + "type": "heading", + "parent_element_id": 4960, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 30, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Task related files'" + }, + "level": 4 + }, + { + "id": 4966, + "order": "4.00000000000000000000", + "type": "table", + "parent_element_id": 4960, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 629, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "25bc33f8-15f3-4724-952d-c9b47d989360", + "name": "Name", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7282')" + } + } + }, + { + "uid": "de69ecc8-b7a2-48ae-a4bc-69d0a352a7a9", + "name": "File", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "custom", + "navigate_to_page_id": null, + "page_parameters": [], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7284.0.url')" + }, + "target": "blank", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7284.0.visible_name')" + }, + "variant": "link" + } + }, + { + "uid": "39073cd3-4cfa-44e6-9c50-4242bd7714a5", + "name": "Task", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 338, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7283.0.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7283.0.value')" + }, + "variant": "link" + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + } + ], + "data_sources": [ + { + "id": 627, + "name": "Project details", + "order": "1.00000000000000000000", + "service": { + "id": 786, + "integration_id": 57, + "type": "local_baserow_get_row", + "sample_data": null, + "table_id": 753, + "view_id": null, + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + } + } + }, + { + "id": 628, + "name": "Project files", + "order": "2.00000000000000000000", + "service": { + "id": 787, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 759, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7285, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project_id')" + }, + "value_is_formula": true + }, + { + "field_id": 7283, + "type": "empty", + "value": { + "mode": "raw", + "version": "0.1", + "formula": "" + }, + "value_is_formula": false + } + ], + "default_result_count": 20 + } + }, + { + "id": 629, + "name": "Task files", + "order": "3.00000000000000000000", + "service": { + "id": 788, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 759, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7283, + "type": "not_empty", + "value": { + "mode": "raw", + "version": "0.1", + "formula": "" + }, + "value_is_formula": false + } + ], + "default_result_count": 20 + } + } + ], + "workflow_actions": [ + { + "id": 526, + "type": "create_row", + "order": 1, + "page_id": 348, + "element_id": 4967, + "event": "submit", + "service": { + "id": 823, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 759, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "field_mappings": [ + { + "field_id": 7282, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4968')" + }, + "enabled": true + }, + { + "field_id": 7284, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4969')" + }, + "enabled": true + }, + { + "field_id": 7285, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.627.id')" + }, + "enabled": true + } + ] + } + }, + { + "id": 527, + "type": "delete_row", + "order": 1, + "page_id": 348, + "element_id": 4964, + "event": "853190a8-9fb8-4ee5-a021-7234c8c04c79_click", + "service": { + "id": 824, + "integration_id": 57, + "type": "local_baserow_delete_row", + "sample_data": null, + "table_id": 759, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + }, + { + "id": 528, + "type": "refresh_data_source", + "order": 2, + "page_id": 348, + "element_id": 4967, + "event": "submit", + "data_source_id": 628 + }, + { + "id": 529, + "type": "refresh_data_source", + "order": 2, + "page_id": 348, + "element_id": 4964, + "event": "853190a8-9fb8-4ee5-a021-7234c8c04c79_click", + "data_source_id": 628 + } + ], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 349, + "name": "Add milestone", + "order": 14, + "path": "/add-milestone", + "path_params": [], + "query_params": [ + { + "name": "project", + "type": "numeric" + } + ], + "shared": false, + "elements": [ + { + "id": 4975, + "order": "0.33333333333333331483", + "type": "text", + "parent_element_id": 4972, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Project'" + }, + "format": "plain" + }, + { + "id": 4976, + "order": "0.50000000000000000000", + "type": "text", + "parent_element_id": 4972, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 1, + "style_padding_top": 8, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 1, + "style_padding_bottom": 8, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 1, + "style_padding_left": 16, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 1, + "style_padding_right": 16, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffff80", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.631.*.field_7236')" + }, + "format": "plain" + }, + { + "id": 4973, + "order": "1.00000000000000000000", + "type": "input_text", + "parent_element_id": 4972, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Name'" + }, + "required": true, + "validation_type": "any", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "is_multiline": false, + "rows": 3, + "input_type": "text" + }, + { + "id": 4977, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Add a new milestone'" + }, + "level": 2 + }, + { + "id": 4978, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": 4970, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Project'" + }, + "level": 3 + }, + { + "id": 4979, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": 4970, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Milestone'" + }, + "level": 3 + }, + { + "id": 4980, + "order": "1.00000000000000000000", + "type": "simple_container", + "parent_element_id": 4971, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "color", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal" + }, + { + "id": 4981, + "order": "1.00000000000000000000", + "type": "link", + "parent_element_id": 4980, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 2, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 349, + "page_parameters": [], + "query_parameters": [ + { + "name": "project", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7236')" + }, + "variant": "link" + }, + { + "id": 4970, + "order": "2.00000000000000000000", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 50, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 3, + "column_gap": 20, + "alignment": "top" + }, + { + "id": 4971, + "order": "2.00000000000000000000", + "type": "repeat", + "parent_element_id": 4970, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 630, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "orientation": "vertical", + "items_per_row": { + "tablet": 2, + "desktop": 2, + "smartphone": 2 + }, + "horizontal_gap": 0, + "vertical_gap": 20 + }, + { + "id": 4974, + "order": "2.00000000000000000000", + "type": "input_text", + "parent_element_id": 4972, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Short description'" + }, + "required": true, + "validation_type": "any", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "is_multiline": false, + "rows": 3, + "input_type": "text" + }, + { + "id": 4982, + "order": "2.00000000000000000000", + "type": "text", + "parent_element_id": 4980, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 2, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7237')" + }, + "format": "plain" + }, + { + "id": 4972, + "order": "3.00000000000000000000", + "type": "form_container", + "parent_element_id": 4970, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('page_parameter.project') > 0" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 50, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "submit_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Add milestone'" + }, + "reset_initial_values_post_submission": false + } + ], + "data_sources": [ + { + "id": 630, + "name": "Available projects", + "order": "1.00000000000000000000", + "service": { + "id": 789, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 753, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7324, + "type": "equal", + "value": { + "mode": "raw", + "version": "0.1", + "formula": "Active" + }, + "value_is_formula": false + }, + { + "field_id": 7287, + "type": "has_value_equal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('user.username')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 631, + "name": "Project", + "order": "3.00000000000000000000", + "service": { + "id": 790, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 753, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7244, + "type": "equal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + } + ], + "workflow_actions": [ + { + "id": 530, + "type": "create_row", + "order": 1, + "page_id": 349, + "element_id": 4972, + "event": "submit", + "service": { + "id": 825, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 755, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "field_mappings": [ + { + "field_id": 7248, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4973')" + }, + "enabled": true + }, + { + "field_id": 7249, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4974')" + }, + "enabled": true + }, + { + "field_id": 7250, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project')" + }, + "enabled": true + } + ] + } + }, + { + "id": 531, + "type": "open_page", + "order": 2, + "page_id": 349, + "element_id": 4972, + "event": "submit", + "navigation_type": "page", + "navigate_to_page_id": 345, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.project')" + } + } + ], + "query_parameters": [ + { + "name": "milestone_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('previous_action.530.id')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self" + } + ], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 350, + "name": "Projects", + "order": 15, + "path": "/projects", + "path_params": [], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 4983, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Active projects'" + }, + "level": 2 + }, + { + "id": 4984, + "order": "1.50000000000000000000", + "type": "table", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 20, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 632, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "14e6ec86-3865-4bd1-bfc3-ffb96ce2edf4", + "name": "Name", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 344, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7236')" + }, + "variant": "link" + } + }, + { + "uid": "44c2720c-bc2b-488c-b523-165ab94a5725", + "name": "Start date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7238')" + } + } + }, + { + "uid": "c6f43bae-cdfb-43bf-b23f-1573530caa5a", + "name": "End date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7239')" + } + } + }, + { + "uid": "6833ba9a-3ec1-4540-9f5a-0218051abfe0", + "name": "Owner", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 352, + "page_parameters": [ + { + "name": "user_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7240.0.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7240.0.value')" + }, + "variant": "link" + } + }, + { + "uid": "919ae367-1203-4d28-a6cc-65bf367d2df7", + "name": "Total estimated workload", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7288')" + } + } + }, + { + "uid": "4e9e154c-64c4-451c-a34e-589c9562dcda", + "name": "Total tasks", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7298')" + } + } + }, + { + "uid": "004295f3-2d43-4a2d-8aab-bedb17df8244", + "name": "Task progress", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7315'),'%')" + } + } + }, + { + "uid": "3b402e94-865f-4fc3-afad-551098279a49", + "name": "Time progress", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7286'),'%')" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + }, + { + "id": 4985, + "order": "2.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Scheduled projects'" + }, + "level": 2 + }, + { + "id": 4986, + "order": "2.33333333333333348136", + "type": "link", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "page", + "navigate_to_page_id": 351, + "page_parameters": [], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'+ Create new Project'" + }, + "variant": "button" + }, + { + "id": 4987, + "order": "2.50000000000000000000", + "type": "table", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 20, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 633, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "6bf1f522-d053-488f-bccc-f119e443ccd8", + "name": "Name", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 344, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7236')" + }, + "variant": "link" + } + }, + { + "uid": "65d3f7e2-1b4b-49cc-9312-124a12692c9e", + "name": "Start date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7238')" + } + } + }, + { + "uid": "c23a6d8d-b43d-4d7d-82d5-9fb376b2cf6c", + "name": "End date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7239')" + } + } + }, + { + "uid": "95e72901-eb41-4e2b-ab1d-a4fa0f03e554", + "name": "Owner", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 352, + "page_parameters": [ + { + "name": "user_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7240.0.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7240.0.value')" + }, + "variant": "link" + } + }, + { + "uid": "e9fb7ffb-8f7c-4eca-8096-6ce00cb20ef8", + "name": "Total estimated workload", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7288')" + } + } + }, + { + "uid": "2fa6341f-5db2-4cbb-bf95-5370a59f5fcc", + "name": "Total tasks", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7298')" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + }, + { + "id": 4988, + "order": "3.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Completed projects'" + }, + "level": 2 + }, + { + "id": 4989, + "order": "4.00000000000000000000", + "type": "table", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 634, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "6839d51f-97c8-4d46-807a-a236b4f4c9a7", + "name": "Name", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 344, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7236')" + }, + "variant": "link" + } + }, + { + "uid": "884f44cc-e816-4017-87d3-11225beb413f", + "name": "Start date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7238')" + } + } + }, + { + "uid": "082a8604-5310-447b-9963-c1a727313afd", + "name": "End date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7239')" + } + } + }, + { + "uid": "36e37631-875d-4222-8cc8-f8494747a253", + "name": "Owner", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 352, + "page_parameters": [ + { + "name": "user_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7240.0.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7240.0.value')" + }, + "variant": "link" + } + }, + { + "uid": "a0a3f4ff-dd6f-42aa-bfa4-bf2262203682", + "name": "Tasks", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7243.*.value')" + } + } + }, + { + "uid": "9ed1523d-384b-4891-8425-10b7e0eabf33", + "name": "Total estimated workload", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7288')" + } + } + }, + { + "uid": "4b9eb512-b9e2-4895-9810-7365522d854c", + "name": "Total completed workload", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7291')" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + } + ], + "data_sources": [ + { + "id": 632, + "name": "Active projects", + "order": "1.00000000000000000000", + "service": { + "id": 791, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 753, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7324, + "type": "equal", + "value": { + "mode": "raw", + "version": "0.1", + "formula": "Active" + }, + "value_is_formula": false + } + ], + "default_result_count": 20 + } + }, + { + "id": 633, + "name": "Scheduled projects", + "order": "2.00000000000000000000", + "service": { + "id": 792, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 753, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7324, + "type": "equal", + "value": { + "mode": "raw", + "version": "0.1", + "formula": "Scheduled" + }, + "value_is_formula": false + } + ], + "default_result_count": 20 + } + }, + { + "id": 634, + "name": "Completed projects", + "order": "3.00000000000000000000", + "service": { + "id": 793, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 753, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7324, + "type": "equal", + "value": { + "mode": "raw", + "version": "0.1", + "formula": "Completed" + }, + "value_is_formula": false + } + ], + "default_result_count": 20 + } + } + ], + "workflow_actions": [], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 351, + "name": "Add project", + "order": 16, + "path": "/add-project", + "path_params": [], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 4991, + "order": "1.00000000000000000000", + "type": "input_text", + "parent_element_id": 4990, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Name'" + }, + "required": true, + "validation_type": "any", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "is_multiline": false, + "rows": 3, + "input_type": "text" + }, + { + "id": 4996, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Add a new project'" + }, + "level": 2 + }, + { + "id": 4990, + "order": "2.00000000000000000000", + "type": "form_container", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 2, + "style_padding_top": 20, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 2, + "style_padding_bottom": 20, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 2, + "style_padding_left": 50, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 2, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "small", + "style_width_child": "normal", + "submit_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Create new project'" + }, + "reset_initial_values_post_submission": false + }, + { + "id": 4992, + "order": "2.00000000000000000000", + "type": "input_text", + "parent_element_id": 4990, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Description'" + }, + "required": true, + "validation_type": "any", + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "is_multiline": true, + "rows": 3, + "input_type": "text" + }, + { + "id": 4993, + "order": "3.00000000000000000000", + "type": "datetime_picker", + "parent_element_id": 4990, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Start date'" + }, + "required": true, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "date_format": "ISO", + "include_time": false, + "time_format": "24" + }, + { + "id": 4994, + "order": "4.00000000000000000000", + "type": "datetime_picker", + "parent_element_id": 4990, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'End date'" + }, + "required": true, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "date_format": "ISO", + "include_time": false, + "time_format": "24" + }, + { + "id": 4995, + "order": "5.00000000000000000000", + "type": "record_selector", + "parent_element_id": 4990, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 586, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [ + { + "schema_property": "field_7217", + "filterable": false, + "sortable": false, + "searchable": true + } + ], + "required": false, + "label": { + "mode": "simple", + "version": "0.1", + "formula": "'Project owner'" + }, + "default_value": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "placeholder": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "multiple": false, + "option_name_suffix": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + } + ], + "data_sources": [], + "workflow_actions": [ + { + "id": 532, + "type": "create_row", + "order": 1, + "page_id": 351, + "element_id": 4990, + "event": "submit", + "service": { + "id": 826, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 753, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "field_mappings": [ + { + "field_id": 7236, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4991')" + }, + "enabled": true + }, + { + "field_id": 7237, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4992')" + }, + "enabled": true + }, + { + "field_id": 7238, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4993')" + }, + "enabled": true + }, + { + "field_id": 7239, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4994')" + }, + "enabled": true + }, + { + "field_id": 7240, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('form_data.4995')" + }, + "enabled": true + } + ] + } + }, + { + "id": 533, + "type": "create_row", + "order": 2, + "page_id": 351, + "element_id": 4990, + "event": "submit", + "service": { + "id": 827, + "integration_id": 57, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 754, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "field_mappings": [ + { + "field_id": 7246, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('previous_action.532.id')" + }, + "enabled": true + }, + { + "field_id": 7247, + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('previous_action.532.field_7240.0.id')" + }, + "enabled": true + } + ] + } + }, + { + "id": 534, + "type": "open_page", + "order": 3, + "page_id": 351, + "element_id": 4990, + "event": "submit", + "navigation_type": "page", + "navigate_to_page_id": 344, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('previous_action.532.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self" + } + ], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [] + }, + { + "id": 352, + "name": "User details", + "order": 17, + "path": "/user-details/:user_id", + "path_params": [ + { + "name": "user_id", + "type": "numeric" + } + ], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 4997, + "order": "1.00000000000000000000", + "type": "column", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "column_amount": 2, + "column_gap": 20, + "alignment": "top" + }, + { + "id": 4998, + "order": "1.00000000000000000000", + "type": "image", + "parent_element_id": 4997, + "place_in_container": "1", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "image": { + "image_border_radius": 8 + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "image_source_type": "url", + "image_file_id": null, + "image_url": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.635.field_7220.0.url')" + }, + "alt_text": { + "mode": "simple", + "version": "0.1", + "formula": "" + } + }, + { + "id": 4999, + "order": "3.00000000000000000000", + "type": "heading", + "parent_element_id": 4997, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.635.field_7217')" + }, + "level": 2 + }, + { + "id": 5000, + "order": "3.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Open tasks'" + }, + "level": 3 + }, + { + "id": 5001, + "order": "4.00000000000000000000", + "type": "text", + "parent_element_id": 4997, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Email'" + }, + "format": "plain" + }, + { + "id": 5002, + "order": "4.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 0, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Assignee'" + }, + "level": 4 + }, + { + "id": 5003, + "order": "4.50000000000000000000", + "type": "table", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 4, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 636, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "694ba6e9-273a-4612-851c-8058607e27eb", + "name": "Icon", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7321'),' ',get('current_record.field_7322'),' ',get('current_record.field_7330'))" + } + } + }, + { + "uid": "67989d9a-7948-4550-96d3-503e47c39ea2", + "name": "Name", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 338, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7253')" + }, + "variant": "link" + } + }, + { + "uid": "af12b8a3-de70-4988-ac5c-bd960c91dac5", + "name": "Status", + "type": "tags", + "styles": {}, + "config": { + "values": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7255.value')" + }, + "colors_is_formula": true, + "colors": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7255.color')" + } + } + }, + { + "uid": "4e31192c-7826-4ae7-ab08-467dd5c135ba", + "name": "Priority", + "type": "tags", + "styles": {}, + "config": { + "values": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7256.value')" + }, + "colors_is_formula": true, + "colors": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7256.color')" + } + } + }, + { + "uid": "5c741223-7e2c-4934-bf41-47942a0887e1", + "name": "Start date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7259')" + } + } + }, + { + "uid": "01f86bab-659a-4185-96cc-55abb51a3560", + "name": "Due date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7260')" + } + } + }, + { + "uid": "b0c8f976-35e5-4bee-84cd-a407f55b792b", + "name": "Project", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 344, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7263.0.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7263.0.value')" + }, + "variant": "link" + } + }, + { + "uid": "879b450b-9ea2-48a3-af62-dce8bd21966a", + "name": "Milestone", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 345, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7263.0.id')" + } + } + ], + "query_parameters": [ + { + "name": "milestone_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7262.0.id')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7262.0.value')" + }, + "variant": "link" + } + }, + { + "uid": "0c61ed04-28b8-4f73-883f-b91c66467bd1", + "name": "Estimated", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7270')" + } + } + }, + { + "uid": "2eb3a09c-8ac8-4461-8823-e4a52d262fb4", + "name": "Registered", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7323')" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + }, + { + "id": 5004, + "order": "5.00000000000000000000", + "type": "link", + "parent_element_id": 4997, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 4, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "navigation_type": "custom", + "navigate_to_page_id": null, + "page_parameters": [], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "concat('mailto:',get('data_source.635.field_7218'))" + }, + "target": "self", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.635.field_7218')" + }, + "variant": "link" + }, + { + "id": 5005, + "order": "5.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 0, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Reviewer'" + }, + "level": 4 + }, + { + "id": 5006, + "order": "5.50000000000000000000", + "type": "table", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 4, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 637, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "5b5781ec-77d7-4954-9f11-28a58fdd1093", + "name": "Icon", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7321'),' ',get('current_record.field_7322'),' ',get('current_record.field_7330'))" + } + } + }, + { + "uid": "be11e012-0fd2-4938-88a9-79ed4ff41d7e", + "name": "Name", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 338, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7253')" + }, + "variant": "link" + } + }, + { + "uid": "716c18e1-a593-4226-8bd8-eaf6efa95666", + "name": "Status", + "type": "tags", + "styles": {}, + "config": { + "values": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7255.value')" + }, + "colors_is_formula": true, + "colors": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7255.color')" + } + } + }, + { + "uid": "42d462d2-84ff-4de0-bbf4-8f801652c3a0", + "name": "Priority", + "type": "tags", + "styles": {}, + "config": { + "values": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7256.value')" + }, + "colors_is_formula": true, + "colors": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7256.color')" + } + } + }, + { + "uid": "87f5fb6b-83e3-4698-b529-e7ce2838de06", + "name": "Start date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7259')" + } + } + }, + { + "uid": "c4158e51-d6d5-4a54-9ee0-f9729980b88c", + "name": "Due date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7260')" + } + } + }, + { + "uid": "84b2ee86-2822-4bb7-97fa-df72dfa37693", + "name": "Project", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 344, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7263.0.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7263.0.value')" + }, + "variant": "link" + } + }, + { + "uid": "c58cc5c2-6eae-4d06-917f-3f916a24e071", + "name": "Milestone", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 345, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7263.0.id')" + } + } + ], + "query_parameters": [ + { + "name": "milestone_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7262.0.id')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7262.0.value')" + }, + "variant": "link" + } + }, + { + "uid": "92b106e9-7204-4406-88ae-d1aac8a7581a", + "name": "Estimated", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7270')" + } + } + }, + { + "uid": "289b0fb3-4994-44bf-978c-0b55dac4f361", + "name": "Registered", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7323')" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + }, + { + "id": 5007, + "order": "6.00000000000000000000", + "type": "text", + "parent_element_id": 4997, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Email'" + }, + "format": "plain" + }, + { + "id": 5008, + "order": "6.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Creator'" + }, + "level": 4 + }, + { + "id": 5009, + "order": "7.00000000000000000000", + "type": "text", + "parent_element_id": 4997, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 4, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.635.field_7219')" + }, + "format": "plain" + }, + { + "id": 5010, + "order": "7.00000000000000000000", + "type": "table", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 4, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 8, + "style_border_radius": 8, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "data_source_id": 638, + "items_per_page": 20, + "button_load_more_label": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "schema_property": null, + "property_options": [], + "fields": [ + { + "uid": "093df0ce-8af0-460a-b62c-42b2a7afae60", + "name": "Icon", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "concat(get('current_record.field_7321'),' ',get('current_record.field_7322'),' ',get('current_record.field_7330'))" + } + } + }, + { + "uid": "c06fce0b-f5ba-4f43-9a84-36f803a2aa9a", + "name": "Name", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 338, + "page_parameters": [ + { + "name": "task_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7253')" + }, + "variant": "link" + } + }, + { + "uid": "18592a42-b935-4c35-acb9-0a76ba7faccb", + "name": "Status", + "type": "tags", + "styles": {}, + "config": { + "values": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7255.value')" + }, + "colors_is_formula": true, + "colors": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7255.color')" + } + } + }, + { + "uid": "bb9c1d62-d68e-4762-b9df-43910226ea7c", + "name": "Priority", + "type": "tags", + "styles": {}, + "config": { + "values": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7256.value')" + }, + "colors_is_formula": true, + "colors": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7256.color')" + } + } + }, + { + "uid": "ecd03610-74b5-47f3-9ee2-921e9310f431", + "name": "Start date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7259')" + } + } + }, + { + "uid": "68665923-7a6b-4896-8a69-90a13244d463", + "name": "Due date", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7260')" + } + } + }, + { + "uid": "a1428cad-7166-4ff3-a65d-ad5f47bbcea4", + "name": "Project", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 344, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7263.0.id')" + } + } + ], + "query_parameters": [], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7263.0.value')" + }, + "variant": "link" + } + }, + { + "uid": "02e8d77c-218a-4a35-9edb-7c6086a1be0c", + "name": "Milestone", + "type": "link", + "styles": {}, + "config": { + "navigation_type": "page", + "navigate_to_page_id": 345, + "page_parameters": [ + { + "name": "project_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7263.0.id')" + } + } + ], + "query_parameters": [ + { + "name": "milestone_id", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7262.0.id')" + } + } + ], + "navigate_to_url": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "target": "self", + "link_name": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7262.0.value')" + }, + "variant": "link" + } + }, + { + "uid": "44ed0605-1165-4293-8da3-7f3282bbde4f", + "name": "Estimated", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7270')" + } + } + }, + { + "uid": "d5681330-c516-4850-8738-0885fbd35cd3", + "name": "Registered", + "type": "text", + "styles": {}, + "config": { + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('current_record.field_7323')" + } + } + } + ], + "orientation": { + "tablet": "horizontal", + "desktop": "horizontal", + "smartphone": "horizontal" + } + }, + { + "id": 5011, + "order": "8.00000000000000000000", + "type": "text", + "parent_element_id": 4997, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "body_font_size": 11, + "body_font_weight": "semi-bold" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 4, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Team'" + }, + "format": "plain" + }, + { + "id": 5012, + "order": "9.00000000000000000000", + "type": "text", + "parent_element_id": 4997, + "place_in_container": "0", + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": {}, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 4, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 10, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 0, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 0, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('data_source.635.field_7221.*.value')" + }, + "format": "plain" + } + ], + "data_sources": [ + { + "id": 635, + "name": "User details", + "order": "1.00000000000000000000", + "service": { + "id": 794, + "integration_id": 57, + "type": "local_baserow_get_row", + "sample_data": null, + "table_id": 751, + "view_id": null, + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.user_id')" + } + } + }, + { + "id": 636, + "name": "Assignee open tasks", + "order": "2.00000000000000000000", + "service": { + "id": 795, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 756, + "view_id": 3357, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7255, + "type": "single_select_not_equal", + "value": { + "mode": "raw", + "version": "0.1", + "formula": "3073" + }, + "value_is_formula": false + }, + { + "field_id": 7257, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.user_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 637, + "name": "Reviewer open tasks", + "order": "3.00000000000000000000", + "service": { + "id": 796, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 756, + "view_id": null, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7255, + "type": "single_select_not_equal", + "value": { + "mode": "raw", + "version": "0.1", + "formula": "3073" + }, + "value_is_formula": false + }, + { + "field_id": 7266, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.user_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + }, + { + "id": 638, + "name": "Creator open tasks", + "order": "4.00000000000000000000", + "service": { + "id": 797, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 756, + "view_id": 3357, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [ + { + "field_id": 7255, + "type": "single_select_not_equal", + "value": { + "mode": "raw", + "version": "0.1", + "formula": "3073" + }, + "value_is_formula": false + }, + { + "field_id": 7258, + "type": "link_row_has", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "get('page_parameter.user_id')" + }, + "value_is_formula": true + } + ], + "default_result_count": 20 + } + } + ], + "workflow_actions": [], + "visibility": "logged-in", + "role_type": "allow_all", + "roles": [] + } + ], + "integrations": [ + { + "id": 57, + "name": "Local Baserow", + "order": "1.00000000000000000000", + "type": "local_baserow", + "authorized_user": null + }, + { + "id": 58, + "name": "SMTP Email", + "order": "2.00000000000000000000", + "type": "smtp", + "host": "smtp.protonmail.ch", + "port": 587, + "use_tls": true, + "username": null, + "password": null + } + ], + "theme": { + "primary_color": "#e8d6bc", + "secondary_color": "#522b47", + "border_color": "#ebe6e1", + "main_success_color": "#618b25", + "main_warning_color": "#e2b95a", + "main_error_color": "#ff5a44", + "custom_colors": [ + { + "name": "White", + "color": "#ffffff", + "value": "ElMaZ" + }, + { + "name": "Dark", + "color": "#191102", + "value": "zoOtT" + }, + { + "name": "Grey", + "color": "#6f686d", + "value": "V6EVv" + }, + { + "name": "Done", + "color": "#ecfcf1", + "value": "FQ0Fi" + }, + { + "name": "Ready for review", + "color": "#f0f4fc", + "value": "EAIyi" + }, + { + "name": "In progress", + "color": "#fffbf0", + "value": "rOEoY" + }, + { + "name": "To do", + "color": "#cff5fa", + "value": "36yGj" + } + ], + "body_font_family": "inter", + "body_font_size": 14, + "body_font_weight": "regular", + "body_text_color": "zoOtT", + "body_text_alignment": "left", + "heading_1_font_family": "inter", + "heading_1_font_size": 32, + "heading_1_font_weight": "medium", + "heading_1_text_color": "zoOtT", + "heading_1_text_alignment": "left", + "heading_1_text_decoration": [ + false, + false, + false, + false + ], + "heading_2_font_family": "inter", + "heading_2_font_size": 24, + "heading_2_font_weight": "medium", + "heading_2_text_color": "zoOtT", + "heading_2_text_alignment": "left", + "heading_2_text_decoration": [ + false, + false, + false, + false + ], + "heading_3_font_family": "inter", + "heading_3_font_size": 20, + "heading_3_font_weight": "medium", + "heading_3_text_color": "zoOtT", + "heading_3_text_alignment": "left", + "heading_3_text_decoration": [ + false, + false, + false, + false + ], + "heading_4_font_family": "inter", + "heading_4_font_size": 16, + "heading_4_font_weight": "regular", + "heading_4_text_color": "zoOtT", + "heading_4_text_alignment": "left", + "heading_4_text_decoration": [ + false, + false, + false, + false + ], + "heading_5_font_family": "inter", + "heading_5_font_size": 16, + "heading_5_font_weight": "regular", + "heading_5_text_color": "zoOtT", + "heading_5_text_alignment": "left", + "heading_5_text_decoration": [ + false, + false, + false, + false + ], + "heading_6_font_family": "inter", + "heading_6_font_size": 14, + "heading_6_font_weight": "regular", + "heading_6_text_color": "zoOtT", + "heading_6_text_alignment": "left", + "heading_6_text_decoration": [ + false, + false, + false, + false + ], + "button_font_family": "inter", + "button_font_size": 12, + "button_font_weight": "semi-bold", + "button_alignment": "left", + "button_text_alignment": "center", + "button_width": "auto", + "button_background_color": "primary", + "button_text_color": "zoOtT", + "button_border_color": "border", + "button_border_size": 0, + "button_border_radius": 8, + "button_vertical_padding": 12, + "button_horizontal_padding": 36, + "button_hover_background_color": "#dbcab2", + "button_hover_text_color": "zoOtT", + "button_hover_border_color": "border", + "button_active_background_color": "primary", + "button_active_text_color": "zoOtT", + "button_active_border_color": "border", + "image_alignment": "left", + "image_max_width": 100, + "image_max_height": null, + "image_border_radius": 0, + "image_constraint": "contain", + "page_background_color": "#f5f2ef", + "page_background_file_id": null, + "page_background_mode": "tile", + "label_font_family": "inter", + "label_text_color": "zoOtT", + "label_font_size": 11, + "label_font_weight": "semi-bold", + "input_font_family": "inter", + "input_font_size": 14, + "input_font_weight": "regular", + "input_text_color": "zoOtT", + "input_background_color": "#ffffff", + "input_border_color": "#d7d8d9", + "input_border_size": 1, + "input_border_radius": 8, + "input_vertical_padding": 12, + "input_horizontal_padding": 16, + "table_border_color": "border", + "table_border_size": 0, + "table_border_radius": 8, + "table_header_background_color": "#faf7f5", + "table_header_text_color": "V6EVv", + "table_header_font_size": 13, + "table_header_font_weight": "semi-bold", + "table_header_font_family": "inter", + "table_header_text_alignment": "left", + "table_cell_background_color": "ElMaZ", + "table_cell_alternate_background_color": "ElMaZ", + "table_cell_alignment": "left", + "table_cell_vertical_padding": 12, + "table_cell_horizontal_padding": 12, + "table_vertical_separator_color": "border", + "table_vertical_separator_size": 0, + "table_horizontal_separator_color": "border", + "table_horizontal_separator_size": 1, + "link_font_family": "inter", + "link_font_size": 14, + "link_font_weight": "medium", + "link_text_alignment": "left", + "link_text_color": "secondary", + "link_hover_text_color": "#381d31", + "link_active_text_color": "secondary", + "link_default_text_decoration": [ + true, + false, + false, + false + ], + "link_hover_text_decoration": [ + true, + false, + false, + false + ], + "link_active_text_decoration": [ + true, + false, + false, + false + ] + }, + "user_sources": [ + { + "id": 34, + "name": "Users", + "order": "1.00000000000000000000", + "type": "local_baserow", + "uid": "34_751_7218_0", + "integration_id": 57, + "auth_providers": [ + { + "id": 34, + "type": "local_baserow_password", + "domain": null, + "enabled": true, + "password_field_id": 7229 + } + ], + "table_id": 751, + "email_field_id": 7218, + "name_field_id": 7217, + "role_field_id": null + } + ], + "favicon_file": null, + "login_page": { + "id": 336, + "name": "Login", + "order": 1, + "path": "/login", + "path_params": [], + "query_params": [], + "shared": false, + "elements": [ + { + "id": 4662, + "order": "1.00000000000000000000", + "type": "heading", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "typography": { + "heading_1_text_alignment": "center" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 10, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 50, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 20, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 20, + "style_margin_right": 0, + "style_background_radius": 0, + "style_border_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "normal", + "style_width_child": "normal", + "value": { + "mode": "simple", + "version": "0.1", + "formula": "'Login'" + }, + "level": 1 + }, + { + "id": 4663, + "order": "2.00000000000000000000", + "type": "auth_form", + "parent_element_id": null, + "place_in_container": null, + "css_classes": "", + "visibility": "all", + "visibility_condition": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "role_type": "allow_all", + "roles": [], + "styles": { + "login_button": { + "button_alignment": "center" + } + }, + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_padding_top": 50, + "style_margin_top": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_padding_bottom": 50, + "style_margin_bottom": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_padding_left": 50, + "style_margin_left": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_right": 50, + "style_margin_right": 0, + "style_background_radius": 16, + "style_border_radius": 16, + "style_background": "color", + "style_background_color": "ElMaZ", + "style_background_file_id": null, + "style_background_mode": "fill", + "style_width": "small", + "style_width_child": "normal", + "user_source_id": 34, + "login_button_label": { + "mode": "simple", + "version": "0.1", + "formula": "'Login'" + } + } + ], + "data_sources": [ + { + "id": 587, + "name": "Tasks", + "order": "1.00000000000000000000", + "service": { + "id": 746, + "integration_id": 57, + "type": "local_baserow_list_rows", + "sample_data": null, + "table_id": 756, + "view_id": 3357, + "sortings": [], + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "default_result_count": 20 + } + } + ], + "workflow_actions": [], + "visibility": "all", + "role_type": "allow_all", + "roles": [] + }, + "id": 199, + "name": "Project Management Application", + "order": 2, + "type": "builder", + "scripts": [], + "custom_code": { + "css": ".flex__container{\ndisplay: flex;\nalign-items: center;\n}\n\n.flex__container > .element__wrapper--full-width{\nmargin: 0;\n}\n\n.flex__container--delete{\nmargin-left: auto\n}\n\n.repeat__container {\n max-height:600px;\n height: 100vh;\n overflow: scroll;\n}\n\n.round-image > .ab-image{\nborder-radius: 50%;\nwidth: 75px;\nheight: 75px;\noverflow: hidden;\n}\n\n.round-image > .ab-image > .ab-image__img{\nwidth: 100%;\nheight: 100%;\nobject-fit: cover;\n}", + "js": "" + } + }, + { + "workflows": [ + { + "id": 1, + "name": "New message", + "order": 1, + "nodes": [ + { + "id": 1, + "type": "local_baserow_rows_created", + "label": "A new message is created", + "service": { + "id": 828, + "integration_id": 59, + "type": "local_baserow_rows_created", + "sample_data": { + "data": { + "results": [ + { + "id": 56, + "Task": [ + { + "id": 1, + "order": "1.00000000000000000000", + "value": "Define CRM entities" + } + ], + "order": "44.00000000000000000000", + "Author": [ + { + "id": 2, + "order": "2.00000000000000000000", + "value": "Bran Lopez" + } + ], + "Message": "Testing", + "Created at": "2026-02-19T14:02:52.452178Z", + "Author picture": [ + { + "url": "http://localhost:4000/media/user_files/7XRl4Cd0ftziIaFnxigwqWxYAnG3UVjO_d022b4d76cc31161673cb1f62b4d1984dc8db57d5d7b62b46ff73de4fde45cfd.jpg", + "name": "7XRl4Cd0ftziIaFnxigwqWxYAnG3UVjO_d022b4d76cc31161673cb1f62b4d1984dc8db57d5d7b62b46ff73de4fde45cfd.jpg", + "size": 42815, + "is_image": true, + "mime_type": "image/jpeg", + "thumbnails": { + "tiny": { + "url": "http://localhost:4000/media/thumbnails/tiny/7XRl4Cd0ftziIaFnxigwqWxYAnG3UVjO_d022b4d76cc31161673cb1f62b4d1984dc8db57d5d7b62b46ff73de4fde45cfd.jpg", + "width": null, + "height": 21 + }, + "small": { + "url": "http://localhost:4000/media/thumbnails/small/7XRl4Cd0ftziIaFnxigwqWxYAnG3UVjO_d022b4d76cc31161673cb1f62b4d1984dc8db57d5d7b62b46ff73de4fde45cfd.jpg", + "width": 48, + "height": 48 + }, + "card_cover": { + "url": "http://localhost:4000/media/thumbnails/card_cover/7XRl4Cd0ftziIaFnxigwqWxYAnG3UVjO_d022b4d76cc31161673cb1f62b4d1984dc8db57d5d7b62b46ff73de4fde45cfd.jpg", + "width": 300, + "height": 160 + } + }, + "image_width": 1155, + "uploaded_at": "2026-02-19T12:48:46.828152+00:00", + "image_height": 720, + "visible_name": "Man.20.jpg" + } + ] + } + ], + "has_next_page": false + }, + "status": 200, + "output_uid": "" + }, + "table_id": 758 + }, + "workflow_id": 1 + }, + { + "id": 2, + "type": "local_baserow_get_row", + "label": "Get task information", + "service": { + "id": 829, + "integration_id": 59, + "type": "local_baserow_get_row", + "sample_data": { + "data": { + "id": 1, + "Name": "Define CRM entities", + "order": "1.00000000000000000000", + "Row ID": "1", + "Status": { + "id": 3073, + "color": "light-green", + "value": "Done" + }, + "Project": [ + { + "id": 1, + "order": "1.00000000000000000000", + "value": "CRM System Upgrade" + } + ], + "Assignee": [ + { + "id": 2, + "order": "2.00000000000000000000", + "value": "Bran Lopez" + } + ], + "Due date": "2026-02-08", + "Priority": { + "id": 3075, + "color": "dark-yellow", + "value": "High" + }, + "Reviewer": [ + { + "id": 14, + "order": "14.00000000000000000000", + "value": "Lane Mahon" + } + ], + "Milestone": [ + { + "id": 1, + "order": "1.00000000000000000000", + "value": "CRM Architecture Approved" + } + ], + "Blocked by": [], + "Created by": [ + { + "id": 2, + "order": "2.00000000000000000000", + "value": "Bran Lopez" + } + ], + "Depends on": [], + "Start date": "2026-02-04", + "Task files": [ + { + "id": 1, + "order": "1.00000000000000000000", + "value": "The contract" + } + ], + "Description": "List customers, deals, activities", + "Blocked icon": "", + "Overdue icon": "", + "Task actions": [ + { + "id": 1, + "order": "1.00000000000000000000", + "value": "Create initial CRM entity list" + }, + { + "id": 2, + "order": "2.00000000000000000000", + "value": "Define fields and attributes" + }, + { + "id": 3, + "order": "3.00000000000000000000", + "value": "Review entities with IT Manager" + }, + { + "id": 4, + "order": "4.00000000000000000000", + "value": "Finalize CRM entities" + } + ], + "Task duration": 432000.0, + "Task messages": [ + { + "id": 1, + "order": "1.00000000000000000000", + "value": "I\u2019ve finished the first version of the data model, please take a look" + }, + { + "id": 3, + "order": "3.00000000000000000000", + "value": "Looks solid, especially the customer and incident links" + }, + { + "id": 4, + "order": "4.00000000000000000000", + "value": "Great, I\u2019ll freeze the schema then" + }, + { + "id": 56, + "order": "44.00000000000000000000", + "value": "Testing" + } + ], + "Completion date": "2026-01-19", + "Difference icon": "", + "Name with icons": " Define CRM entities", + "Depends on (icons)": [], + "Estimated workload": 6, + "Notification mails": "bran.lopez@example.com,lane.mahon@example.com,bran.lopez@example.com", + "Days until due date": "0", + "Registered workload": 28800.0, + "Workload difference": 7200.0, + "Milestone (with status)": [ + { + "id": 1, + "value": "\ud83d\udfe1 CRM Architecture Approved" + } + ] + }, + "status": 200, + "output_uid": "" + }, + "table_id": 756, + "view_id": null, + "search_query": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "filter_type": "AND", + "filters": [], + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('previous_node.1.0.field_7281.0.id')" + } + }, + "workflow_id": 1 + }, + { + "id": 3, + "type": "smtp_email", + "label": "Notify stakeholders", + "service": { + "id": 830, + "integration_id": 60, + "type": "smtp_email", + "sample_data": { + "_error": "Failed to send email: (554, b'5.5.1 Error: no valid recipients')" + }, + "from_email": { + "mode": "simple", + "version": "0.1", + "formula": "'mailer@baserow.io'" + }, + "from_name": { + "mode": "simple", + "version": "0.1", + "formula": "'Notifier'" + }, + "to_emails": { + "mode": "simple", + "version": "0.1", + "formula": "get('previous_node.2.field_7313')" + }, + "cc_emails": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "bcc_emails": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "subject": { + "mode": "simple", + "version": "0.1", + "formula": "concat('A new message was send for task ',get('previous_node.2.field_7253'))" + }, + "body_type": "html", + "body": { + "mode": "simple", + "version": "0.1", + "formula": "concat(concat('

A new message was send by ', get('previous_node.1.0.field_7279.0.value'), ' for the task ', get('previous_node.2.field_7253'), '

'), '\n', concat('

', get('previous_node.1.0.field_7278'), '

'), '\n', concat('

Jump in the conversation: ', get('previous_node.2.field_7253'), '

'))" + } + }, + "workflow_id": 1 + } + ], + "state": "draft", + "graph": { + "0": 1, + "1": { + "next": { + "": [ + 2 + ] + } + }, + "2": { + "next": { + "": [ + 3 + ] + } + }, + "3": {} + } + }, + { + "id": 2, + "name": "Status update", + "order": 2, + "nodes": [ + { + "id": 4, + "type": "smtp_email", + "label": "Notify stakeholders", + "service": { + "id": 831, + "integration_id": 60, + "type": "smtp_email", + "sample_data": null, + "from_email": { + "mode": "simple", + "version": "0.1", + "formula": "'mailer@baserow.io'" + }, + "from_name": { + "mode": "simple", + "version": "0.1", + "formula": "'Notifier'" + }, + "to_emails": { + "mode": "simple", + "version": "0.1", + "formula": "get('previous_node.5.body.items.0.Notification mails')" + }, + "cc_emails": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "bcc_emails": { + "mode": "simple", + "version": "0.1", + "formula": "" + }, + "subject": { + "mode": "simple", + "version": "0.1", + "formula": "concat('The status was updated for the task ',get('previous_node.5.body.items.0.Name'))" + }, + "body_type": "html", + "body": { + "mode": "simple", + "version": "0.1", + "formula": "concat(concat('

The status was updated for the task ',get('previous_node.5.body.items.0.Name'),'

'),'\n',concat('

New status: ',get('previous_node.5.body.items.0.Status.value'),'

'),'\n',concat('

Check the details: ',get('previous_node.5.body.items.0.Name'),'

'))" + } + }, + "workflow_id": 2 + }, + { + "id": 5, + "type": "http_trigger", + "label": "Status update changed", + "service": { + "id": 832, + "integration_id": null, + "type": "http_trigger", + "sample_data": { + "data": { + "body": { + "items": [ + { + "id": 34, + "Name": "Write ad copy", + "order": "34.00000000000000000000", + "Status": { + "id": 3075, + "color": "light-yellow", + "value": "In progress" + }, + "Project": [ + { + "id": 3, + "order": "3.00000000000000000000", + "value": "Spring Marketing Campaign" + } + ], + "Assignee": [ + { + "id": 13, + "order": "13.00000000000000000000", + "value": "Judith Triplett" + } + ], + "Due date": "2026-03-01", + "Priority": { + "id": 3079, + "color": "dark-yellow", + "value": "High" + }, + "Reviewer": [ + { + "id": 3, + "order": "3.00000000000000000000", + "value": "Cinda Pullen" + } + ], + "Milestone": [ + { + "id": 12, + "order": "12.00000000000000000000", + "value": "Creative Assets Ready" + } + ], + "Blocked by": [ + { + "id": 31, + "value": "Define target audience" + }, + { + "id": 32, + "value": "Approve campaign budget" + } + ], + "Created by": [ + { + "id": 3, + "order": "3.00000000000000000000", + "value": "Cinda Pullen" + } + ], + "Depends on": [ + { + "id": 31, + "order": "31.00000000000000000000", + "value": "Define target audience" + }, + { + "id": 32, + "order": "32.00000000000000000000", + "value": "Approve campaign budget" + } + ], + "Start date": "2026-02-17", + "Task files": [], + "Description": "Marketing texts", + "Blocked icon": "\u26d4", + "Overdue icon": "", + "Task actions": [], + "Task duration": 1123200.0, + "Task messages": [ + { + "id": 41, + "order": "41.00000000000000000000", + "value": "First draft of ad copy ready" + }, + { + "id": 42, + "order": "42.00000000000000000000", + "value": "We\u2019ll need legal to review before launch" + }, + { + "id": 43, + "order": "43.00000000000000000000", + "value": "Understood, sending it to them now" + } + ], + "Completion date": null, + "Difference icon": "", + "Name with icons": "\u26d4 Write ad copy", + "Depends on (icons)": [ + { + "id": 31, + "value": " Define target audience" + }, + { + "id": 32, + "value": " \u26a0\ufe0f Approve campaign budget" + } + ], + "Estimated workload": "8", + "Notification mails": "judith.triplett@example.com,cinda.pullen@example.com,cinda.pullen@example.com", + "Days until due date": "44 days", + "Registered workload": 0.0, + "Workload difference": -28800.0 + } + ], + "event_id": "1f24564b-522d-467f-a49b-bf04d7bd96ab", + "table_id": 756, + "old_items": [ + { + "id": 34, + "Name": "Write ad copy", + "order": "34.00000000000000000000", + "Status": { + "id": 3076, + "color": "light-blue", + "value": "Ready for review" + }, + "Project": [ + { + "id": 3, + "order": "3.00000000000000000000", + "value": "Spring Marketing Campaign" + } + ], + "Assignee": [ + { + "id": 13, + "order": "13.00000000000000000000", + "value": "Judith Triplett" + } + ], + "Due date": "2026-03-01", + "Priority": { + "id": 3079, + "color": "dark-yellow", + "value": "High" + }, + "Reviewer": [ + { + "id": 3, + "order": "3.00000000000000000000", + "value": "Cinda Pullen" + } + ], + "Milestone": [ + { + "id": 12, + "order": "12.00000000000000000000", + "value": "Creative Assets Ready" + } + ], + "Blocked by": [ + { + "id": 31, + "value": "Define target audience" + }, + { + "id": 32, + "value": "Approve campaign budget" + } + ], + "Created by": [ + { + "id": 3, + "order": "3.00000000000000000000", + "value": "Cinda Pullen" + } + ], + "Depends on": [ + { + "id": 31, + "order": "31.00000000000000000000", + "value": "Define target audience" + }, + { + "id": 32, + "order": "32.00000000000000000000", + "value": "Approve campaign budget" + } + ], + "Start date": "2026-02-17", + "Task files": [], + "Description": "Marketing texts", + "Blocked icon": "\u26d4", + "Overdue icon": "", + "Task actions": [], + "Task duration": 1123200.0, + "Task messages": [ + { + "id": 41, + "order": "41.00000000000000000000", + "value": "First draft of ad copy ready" + }, + { + "id": 42, + "order": "42.00000000000000000000", + "value": "We\u2019ll need legal to review before launch" + }, + { + "id": 43, + "order": "43.00000000000000000000", + "value": "Understood, sending it to them now" + } + ], + "Completion date": null, + "Difference icon": "", + "Name with icons": "\u26d4 Write ad copy", + "Depends on (icons)": [ + { + "id": 31, + "value": " Define target audience" + }, + { + "id": 32, + "value": " \u26a0\ufe0f Approve campaign budget" + } + ], + "Estimated workload": "8", + "Notification mails": "judith.triplett@example.com,cinda.pullen@example.com,cinda.pullen@example.com", + "Days until due date": "44 days", + "Registered workload": 0.0, + "Workload difference": -28800.0 + } + ], + "event_type": "rows.updated", + "webhook_id": 1, + "database_id": 198, + "workspace_id": 135 + }, + "method": "POST", + "headers": { + "Host": "imido-unmanufactured-austin.ngrok-free.dev", + "Accept": "*/*", + "User-Agent": "python-requests/2.32.5", + "Content-Type": "application/json", + "Content-Length": "4040", + "Accept-Encoding": "gzip, deflate, br", + "X-Baserow-Event": "rows.updated", + "X-Forwarded-For": "178.116.10.88", + "X-Forwarded-Host": "imido-unmanufactured-austin.ngrok-free.dev", + "X-Forwarded-Proto": "https", + "X-Baserow-Delivery": "1f24564b-522d-467f-a49b-bf04d7bd96ab" + }, + "raw_body": "{\"table_id\": 756, \"database_id\": 198, \"workspace_id\": 135, \"webhook_id\": 1, \"event_id\": \"1f24564b-522d-467f-a49b-bf04d7bd96ab\", \"event_type\": \"rows.updated\", \"items\": [{\"id\": 34, \"order\": \"34.00000000000000000000\", \"Name\": \"Write ad copy\", \"Description\": \"Marketing texts\", \"Status\": {\"id\": 3075, \"value\": \"In progress\", \"color\": \"light-yellow\"}, \"Priority\": {\"id\": 3079, \"value\": \"High\", \"color\": \"dark-yellow\"}, \"Assignee\": [{\"id\": 13, \"value\": \"Judith Triplett\", \"order\": \"13.00000000000000000000\"}], \"Created by\": [{\"id\": 3, \"value\": \"Cinda Pullen\", \"order\": \"3.00000000000000000000\"}], \"Start date\": \"2026-02-17\", \"Due date\": \"2026-03-01\", \"Completion date\": null, \"Milestone\": [{\"id\": 12, \"value\": \"Creative Assets Ready\", \"order\": \"12.00000000000000000000\"}], \"Project\": [{\"id\": 3, \"value\": \"Spring Marketing Campaign\", \"order\": \"3.00000000000000000000\"}], \"Depends on\": [{\"id\": 31, \"value\": \"Define target audience\", \"order\": \"31.00000000000000000000\"}, {\"id\": 32, \"value\": \"Approve campaign budget\", \"order\": \"32.00000000000000000000\"}], \"Task messages\": [{\"id\": 41, \"value\": \"First draft of ad copy ready\", \"order\": \"41.00000000000000000000\"}, {\"id\": 42, \"value\": \"We\\u2019ll need legal to review before launch\", \"order\": \"42.00000000000000000000\"}, {\"id\": 43, \"value\": \"Understood, sending it to them now\", \"order\": \"43.00000000000000000000\"}], \"Reviewer\": [{\"id\": 3, \"value\": \"Cinda Pullen\", \"order\": \"3.00000000000000000000\"}], \"Task actions\": [], \"Registered workload\": 0.0, \"Task duration\": 1123200.0, \"Task files\": [], \"Days until due date\": \"44 days\", \"Blocked by\": [{\"id\": 31, \"value\": \"Define target audience\"}, {\"id\": 32, \"value\": \"Approve campaign budget\"}], \"Blocked icon\": \"\\u26d4\", \"Overdue icon\": \"\", \"Name with icons\": \"\\u26d4 Write ad copy\", \"Depends on (icons)\": [{\"id\": 31, \"value\": \" Define target audience\"}, {\"id\": 32, \"value\": \" \\u26a0\\ufe0f Approve campaign budget\"}], \"Estimated workload\": \"8\", \"Workload difference\": -28800.0, \"Difference icon\": \"\", \"Notification mails\": \"judith.triplett@example.com,cinda.pullen@example.com,cinda.pullen@example.com\"}], \"old_items\": [{\"id\": 34, \"order\": \"34.00000000000000000000\", \"Name\": \"Write ad copy\", \"Description\": \"Marketing texts\", \"Status\": {\"id\": 3076, \"value\": \"Ready for review\", \"color\": \"light-blue\"}, \"Priority\": {\"id\": 3079, \"value\": \"High\", \"color\": \"dark-yellow\"}, \"Assignee\": [{\"id\": 13, \"value\": \"Judith Triplett\", \"order\": \"13.00000000000000000000\"}], \"Created by\": [{\"id\": 3, \"value\": \"Cinda Pullen\", \"order\": \"3.00000000000000000000\"}], \"Start date\": \"2026-02-17\", \"Due date\": \"2026-03-01\", \"Completion date\": null, \"Milestone\": [{\"id\": 12, \"value\": \"Creative Assets Ready\", \"order\": \"12.00000000000000000000\"}], \"Project\": [{\"id\": 3, \"value\": \"Spring Marketing Campaign\", \"order\": \"3.00000000000000000000\"}], \"Depends on\": [{\"id\": 31, \"value\": \"Define target audience\", \"order\": \"31.00000000000000000000\"}, {\"id\": 32, \"value\": \"Approve campaign budget\", \"order\": \"32.00000000000000000000\"}], \"Task messages\": [{\"id\": 41, \"value\": \"First draft of ad copy ready\", \"order\": \"41.00000000000000000000\"}, {\"id\": 42, \"value\": \"We\\u2019ll need legal to review before launch\", \"order\": \"42.00000000000000000000\"}, {\"id\": 43, \"value\": \"Understood, sending it to them now\", \"order\": \"43.00000000000000000000\"}], \"Reviewer\": [{\"id\": 3, \"value\": \"Cinda Pullen\", \"order\": \"3.00000000000000000000\"}], \"Task actions\": [], \"Registered workload\": 0.0, \"Task duration\": 1123200.0, \"Task files\": [], \"Days until due date\": \"44 days\", \"Blocked by\": [{\"id\": 31, \"value\": \"Define target audience\"}, {\"id\": 32, \"value\": \"Approve campaign budget\"}], \"Blocked icon\": \"\\u26d4\", \"Overdue icon\": \"\", \"Name with icons\": \"\\u26d4 Write ad copy\", \"Depends on (icons)\": [{\"id\": 31, \"value\": \" Define target audience\"}, {\"id\": 32, \"value\": \" \\u26a0\\ufe0f Approve campaign budget\"}], \"Estimated workload\": \"8\", \"Workload difference\": -28800.0, \"Difference icon\": \"\", \"Notification mails\": \"judith.triplett@example.com,cinda.pullen@example.com,cinda.pullen@example.com\"}]}", + "user_agent": "python-requests/2.32.5", + "remote_addr": "172.18.0.1", + "query_params": { + "test": "true" + } + }, + "status": 200, + "output_uid": "" + }, + "uid": "98e7408d-7204-4cde-a991-67164109e7ab", + "exclude_get": false, + "is_public": false + }, + "workflow_id": 2 + }, + { + "id": 6, + "type": "router", + "label": "Check if status is done", + "service": { + "id": 833, + "integration_id": null, + "type": "router", + "sample_data": null, + "edges": [ + { + "label": "Done", + "uid": "0ed3336f-d852-423e-a4a3-5d9014d85088", + "condition": { + "mode": "advanced", + "version": "0.1", + "formula": "get('previous_node.5.body.items.0.Status.value') = \"Done\"" + } + } + ], + "default_edge_label": "Other" + }, + "workflow_id": 2 + }, + { + "id": 7, + "type": "local_baserow_update_row", + "label": "Set completion date", + "service": { + "id": 834, + "integration_id": 59, + "type": "local_baserow_upsert_row", + "sample_data": null, + "table_id": 756, + "row_id": { + "mode": "simple", + "version": "0.1", + "formula": "get('previous_node.5.body.items.0.id')" + }, + "field_mappings": [ + { + "field_id": 7261, + "value": { + "mode": "advanced", + "version": "0.1", + "formula": "today()" + }, + "enabled": true + } + ] + }, + "workflow_id": 2 + } + ], + "state": "disabled", + "graph": { + "0": 5, + "4": { + "next": { + "": [ + 6 + ] + } + }, + "5": { + "next": { + "": [ + 4 + ] + } + }, + "6": { + "next": { + "0ed3336f-d852-423e-a4a3-5d9014d85088": [ + 7 + ] + } + }, + "7": {} + } + } + ], + "integrations": [ + { + "id": 59, + "name": "Local Baserow", + "order": "1.00000000000000000000", + "type": "local_baserow", + "authorized_user": null + }, + { + "id": 60, + "name": "SMTP Email", + "order": "2.00000000000000000000", + "type": "smtp", + "host": "smtp.protonmail.ch", + "port": 587, + "use_tls": true, + "username": null, + "password": null + } + ], + "id": 200, + "name": "Send notifications", + "order": 3, + "type": "automation" + } + ] +} \ No newline at end of file diff --git a/backend/templates/work-management-platform.zip b/backend/templates/work-management-platform.zip new file mode 100644 index 0000000000..4b1024e273 Binary files /dev/null and b/backend/templates/work-management-platform.zip differ diff --git a/enterprise/backend/src/baserow_enterprise/apps.py b/enterprise/backend/src/baserow_enterprise/apps.py index 1c61528d94..fde8d97625 100755 --- a/enterprise/backend/src/baserow_enterprise/apps.py +++ b/enterprise/backend/src/baserow_enterprise/apps.py @@ -360,6 +360,9 @@ def ready(self): from baserow_enterprise.assistant.tools.automation.tool_types import ( AutomationToolType, ) + from baserow_enterprise.assistant.tools.builder.tool_types import ( + BuilderToolType, + ) from baserow_enterprise.assistant.tools.core.tool_types import CoreToolType from baserow_enterprise.assistant.tools.database.tool_types import ( DatabaseToolType, @@ -378,6 +381,7 @@ def ready(self): assistant_tool_registry.register(CoreToolType()) assistant_tool_registry.register(DatabaseToolType()) assistant_tool_registry.register(AutomationToolType()) + assistant_tool_registry.register(BuilderToolType()) assistant_tool_registry.register(SearchDocsToolType()) # The signals must always be imported last because they use the registries diff --git a/enterprise/backend/src/baserow_enterprise/assistant/prompts.py b/enterprise/backend/src/baserow_enterprise/assistant/prompts.py index bc8ff080f0..da98c4816b 100644 --- a/enterprise/backend/src/baserow_enterprise/assistant/prompts.py +++ b/enterprise/backend/src/baserow_enterprise/assistant/prompts.py @@ -9,17 +9,16 @@ RULES = """\ -1. Use the `thought` parameter on EVERY tool call to state your reasoning. +1. Use the `thought` parameter on EVERY tool call. It is shown to the user, so write it as a brief user-facing status (e.g. "Checking existing pages" not "Calling list_pages to get page IDs"). Never use tool names or internal references. 2. Have tools → call them. No tools in current mode → check other modes before saying something is not possible. If another mode has the tool, switch_mode and use it. Only explain manual UI steps if no mode covers the action. 3. One tool per turn. Wait for the result. Never reply and call a tool in same turn. -4. Verify after create/modify — navigate to show the result. -5. Request priority: action > follow-up (reuse prior IDs, never search docs) > question. When a tool result contains next_steps, act on them immediately — do not ask for permission to continue. -6. You start in the mode matching your UI context (database/application/automation). If the user asks a how-to or feature question, call switch_mode("explain"), then search_user_docs. -7. After finishing the tool calls in a different mode (not just after switching — after the actual work is done and results received), switch back to the original domain mode (check and ). -8. Reply in concise Markdown. Never expose raw JSON or internal IDs unless asked. -9. When a request references resources by name/ID, verify they exist (list_*) before building on them. If not found, ask — don't guess. But when the task *requires* creating resources in another domain (e.g. building an app that needs new tables), switch_mode and create them yourself — don't ask the user to do it manually. -10. Before responding to the user, verify ALL parts of `` are addressed. If anything is missing, continue working. -11. Before adding a table to a database or a page to an application, check that the target is semantically related. If the name/purpose doesn't match, ask the user which target to use or whether to create a new one. Examples of mismatches: adding "Inquiries" table to a "Project Management" DB; adding "Event Registration" pages to a "Portfolio Website" app. This applies to ALL resource creation — tables, pages, and the applications/databases themselves. Remember their answer — only re-ask when a new, different mismatch arises. +4. Request priority: action > follow-up (reuse prior IDs, never search docs) > question. When a tool result contains next_steps, act on them immediately — do not ask for permission to continue. +5. You start in the mode matching your UI context (database/application/automation). If the user asks a how-to or feature question, call switch_mode("explain"), then search_user_docs. +6. After finishing the tool calls in a different mode (not just after switching — after the actual work is done and results received), switch back to the original domain mode (check and ). +7. Reply in concise Markdown. Never expose raw JSON or internal IDs unless asked. +8. Before starting work, use list_* to understand what exists and avoid duplicates. But don't list resources you just created — create_* tools already return IDs and refs. When a request references resources by name/ID, verify they exist before building on them. If not found, ask — don't guess. But when the task *requires* creating resources in another domain (e.g. building an app that needs new tables), switch_mode and create them yourself — don't ask the user to do it manually. +9. Before responding to the user, verify ALL parts of `` are addressed. If anything is missing, continue working. +10. At the start, verify the request fits the current UI context (e.g. don't add "Inquiries" table to a "Project Management" DB). If it doesn't match and not explicitly requested, ask the user which target to use. """ @@ -37,6 +36,7 @@ Workspace → Databases, Applications, Automations, Dashboards Database → Tables → Fields (30+ types, link_row for relations) + Views (grid, form, kanban, calendar, gallery, timeline) + Rows Application → Pages → Elements + Data Sources + Actions +Shared elements: Headers/footers live on a shared page and appear on ALL pages. ONLY put site-wide navigation in them (menus, logo, links). NEVER put page-specific content inside headers/footers. Automation → Workflows → Trigger + Action/Router/Iterator nodes (use {{ node.ref }} for formulas) """ diff --git a/enterprise/backend/src/baserow_enterprise/assistant/tools/automation/tools.py b/enterprise/backend/src/baserow_enterprise/assistant/tools/automation/tools.py index 5338ddf07b..cd23eb3307 100644 --- a/enterprise/backend/src/baserow_enterprise/assistant/tools/automation/tools.py +++ b/enterprise/backend/src/baserow_enterprise/assistant/tools/automation/tools.py @@ -364,7 +364,6 @@ def delete_nodes( automation_toolset = FunctionToolset(TOOL_FUNCTIONS, max_retries=3) ROUTING_RULES = """\ -- Check list_* before create_* to avoid duplicates. - switch_mode: switch domain if task needs tools not in the current mode. - create_workflows: use {{ node.ref }} for node refs, $formula: prefix for dynamic field values. - add_nodes: insert/append nodes. Use list_nodes first to find existing node IDs.""" diff --git a/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/__init__.py b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/__init__.py new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/__init__.py @@ -0,0 +1 @@ + diff --git a/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/agents.py b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/agents.py new file mode 100644 index 0000000000..f662ac5044 --- /dev/null +++ b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/agents.py @@ -0,0 +1,675 @@ +""" +Sub-agents for the builder assistant tools. + +Contains: +- ``BuilderFormulaContext``: Builder-specific formula context. +- ``update_element_formulas()``: Generates formulas for elements. +- ``update_data_source_formulas()``: Generates formulas for data sources. +- ``update_workflow_action_formulas()``: Generates formulas for workflow actions. +""" + +import json +from typing import TYPE_CHECKING, Any + +from django.db import transaction +from django.utils.translation import gettext as _ + +from loguru import logger + +from baserow.contrib.builder.data_sources.handler import DataSourceHandler +from baserow.contrib.builder.elements.handler import ElementHandler +from baserow.contrib.builder.elements.mixins import CollectionElementTypeMixin +from baserow.contrib.builder.elements.registries import element_type_registry +from baserow.contrib.builder.pages.models import Page +from baserow.contrib.builder.workflow_actions.signals import workflow_action_updated +from baserow.core.formula.types import ( + BASEROW_FORMULA_MODE_ADVANCED, + BaserowFormulaObject, +) +from baserow.core.utils import to_path +from baserow_enterprise.assistant.tools.shared.agents import get_formula_generator +from baserow_enterprise.assistant.tools.shared.formula_utils import ( + create_example_from_json_schema, + minimize_json_schema, +) + +from .prompts import BUILDER_FORMULA_PROMPT +from .types import ( + ActionCreate, + DataSourceCreate, + DataSourceUpdate, + ElementItemCreate, + ElementUpdate, +) + +if TYPE_CHECKING: + from django.contrib.auth.models import AbstractUser + + from baserow_enterprise.assistant.deps import ToolHelpers + + +# --------------------------------------------------------------------------- +# BuilderFormulaContext +# --------------------------------------------------------------------------- + + +class BuilderFormulaContext: + """ + Context for formula generation in builder elements. + + Provides access to data sources, page parameters, current record + (for repeat/table elements), form data, and user context. + """ + + def __init__(self, page: Page): + self.page = page + self.context: dict[str, Any] = {} + self.context_metadata: dict[str, Any] = {} + self._current_record_stack: list[int] = [] + + def load_page_context(self) -> None: + """Load all available data providers into the formula context.""" + + self._load_data_sources() + self._load_data_source_context() + self._load_page_parameters() + self._load_user_context() + + elements = ElementHandler().get_elements(self.page, use_cache=False) + self._load_form_data(elements) + + # -- Private loaders ---------------------------------------------------- + + def _load_data_sources(self) -> None: + """Load data sources with schemas.""" + + data_sources = DataSourceHandler().get_data_sources(self.page, with_shared=True) + for ds in data_sources: + if not ds.service: + continue + + service = ds.service.specific + service_type = service.get_type() + + try: + schema = service_type.generate_schema(service) + except Exception: + continue + if not schema: + continue + + key = f"data_source.{ds.id}" + try: + example = create_example_from_json_schema(schema) + fields = minimize_json_schema(schema) + except (ValueError, KeyError): + continue + + self.context[key] = example + self.context_metadata[key] = { + "name": ds.name, + "returns_list": service_type.returns_list, + "fields": fields, + } + + def _load_page_parameters(self) -> None: + """Load page path and query parameters.""" + + params: dict[str, str] = {} + params_meta: dict[str, dict] = {} + + for source in (self.page.path_params or [], self.page.query_params or []): + for p in source: + name = p.get("name") if isinstance(p, dict) else p + ptype = p.get("type", "text") if isinstance(p, dict) else "text" + params[name] = "example_value" + params_meta[name] = {"type": ptype} + + if params: + self.context["page_parameter"] = params + self.context_metadata["page_parameter"] = params_meta + + def _load_data_source_context(self) -> None: + """Load metadata (total_count) for list data sources.""" + + ds_ctx: dict[str, dict] = {} + ds_ctx_meta: dict[str, dict] = {} + + for key, meta in self.context_metadata.items(): + if not key.startswith("data_source.") or not meta.get("returns_list"): + continue + ds_id = key.replace("data_source.", "") + ds_ctx[ds_id] = {"total_count": 100} + ds_ctx_meta[ds_id] = { + "name": meta.get("name", ""), + "fields": {"total_count": {"type": "number", "desc": "Total records"}}, + } + + if ds_ctx: + self.context["data_source_context"] = ds_ctx + self.context_metadata["data_source_context"] = ds_ctx_meta + + def _load_form_data(self, elements: list) -> None: + """Load form element metadata.""" + + from baserow.contrib.builder.elements.mixins import FormElementTypeMixin + + form_data: dict[str, str] = {} + form_meta: dict[str, dict] = {} + + type_map = { + "input_text": "string", + "choice": "string", + "checkbox": "boolean", + "datetime_picker": "string", + "record_selector": "number", + } + + for element in elements: + el_type = element.get_type() + if not isinstance(el_type, FormElementTypeMixin): + continue + + el = element.specific + label = getattr(el, "label", None) + if label and isinstance(label, dict) and "formula" in label: + label = label["formula"] + label = str(label) if label else el_type.type + + data_type = type_map.get(el_type.type, "string") + form_data[str(el.id)] = data_type + form_meta[str(el.id)] = { + "type": el_type.type, + "data_type": data_type, + "label": label, + } + + if form_data: + self.context["form_data"] = form_data + self.context_metadata["form_data"] = form_meta + + def _load_user_context(self) -> None: + """Load user data provider context.""" + + self.context["user"] = { + "id": 1, + "email": "user@example.com", + "username": "user", + "role": "member", + "is_authenticated": True, + } + self.context_metadata["user"] = { + "id": {"type": "number", "desc": "User ID"}, + "email": {"type": "text", "desc": "User email address"}, + "username": {"type": "text", "desc": "Username"}, + "role": {"type": "text", "desc": "User role"}, + "is_authenticated": { + "type": "boolean", + "desc": "Whether user is logged in", + }, + } + + # -- Current record stack ----------------------------------------------- + + def push_current_record_context(self, data_source_id: int) -> None: + """Add current_record context for elements inside collections.""" + + self._current_record_stack.append(data_source_id) + ds_key = f"data_source.{data_source_id}" + + if ds_key in self.context_metadata: + example = self.context.get(ds_key, {}) + if isinstance(example, list) and example: + example = example[0] + self.context["current_record"] = example + ds_meta = self.context_metadata[ds_key] + self.context_metadata["current_record"] = { + "desc": "Current row in the collection element. " + "Use current_record.field_ for row values.", + **ds_meta.get("fields", {}), + } + + def pop_current_record_context(self) -> None: + """Remove current_record context when exiting a collection.""" + + if self._current_record_stack: + self._current_record_stack.pop() + + if not self._current_record_stack: + self.context.pop("current_record", None) + self.context_metadata.pop("current_record", None) + else: + prev = self._current_record_stack[-1] + self.push_current_record_context(prev) + self._current_record_stack.pop() + + # -- FormulaContext interface ------------------------------------------- + + def get_formula_context(self) -> dict[str, Any]: + """Return the context dict for formula generation.""" + return self.context + + def get_context_metadata(self) -> dict[str, Any]: + """Return metadata about the context.""" + return self.context_metadata + + def __getitem__(self, key: str) -> Any: + """ + Resolve a dotted path through the context. + + Handles compound keys like ``data_source.5.0.field_name`` and + wildcard ``*`` for array expansion. + """ + + parts = to_path(key) + if not parts: + raise KeyError(f"Empty path: {key}") + + value, remaining = self._resolve_root(key, parts) + value = self._traverse_path(key, value, remaining) + return self._coerce_leaf(value, key) + + # -- __getitem__ helpers ------------------------------------------------ + + def _resolve_root(self, key: str, parts: list[str]) -> tuple[Any, list[str]]: + """Resolve the root segment, handling ``data_source.{id}`` compound keys.""" + + if len(parts) >= 2 and parts[0] == "data_source": + ds_key = f"data_source.{parts[1]}" + if ds_key not in self.context: + raise KeyError( + f"Data source '{parts[1]}' not found. " + f"Available: {[k for k in self.context if k.startswith('data_source.')]}" + ) + return self.context[ds_key], parts[2:] + return self.context, parts + + def _traverse_path(self, key: str, value: Any, parts: list[str]) -> Any: + """Walk through *parts*, handling dicts, lists, and ``*`` wildcards.""" + + for i, part in enumerate(parts): + if isinstance(value, dict): + if part not in value: + raise KeyError(f"Key '{part}' not found in context at '{key}'") + value = value[part] + elif isinstance(value, list): + if part == "*": + return self._expand_wildcard(value, parts[i + 1 :]) + try: + idx = int(part) + except ValueError: + raise KeyError(f"Invalid list index '{part}' at '{key}'") + if idx >= len(value): + raise KeyError( + f"Index {idx} out of range (len {len(value)}) at '{key}'" + ) + value = value[idx] + else: + raise KeyError(f"Cannot traverse at '{part}' in '{key}'") + return value + + @staticmethod + def _expand_wildcard(items: list, rest: list[str]) -> str: + """Expand a ``*`` wildcard over *items*, extracting the remaining path.""" + + if not rest: + return json.dumps(items) + results = [] + for item in items: + v = item + for r in rest: + if isinstance(v, dict) and r in v: + v = v[r] + else: + v = None + break + if v is not None: + results.append(str(v)) + return ",".join(results) + + @staticmethod + def _coerce_leaf(value: Any, key: str = "") -> Any: + """Ensure the leaf value is a JSON-serialisable primitive.""" + + from datetime import date, datetime + + if isinstance(value, (list, dict)): + return json.dumps(value) + if not isinstance(value, (int, float, str, bool, date, datetime, type(None))): + raise ValueError( + f"Value for '{key}' is not a primitive. Got {type(value).__name__}." + ) + return value + + +# --------------------------------------------------------------------------- +# Formula update orchestrators +# --------------------------------------------------------------------------- + + +def update_element_formulas( + user: "AbstractUser", + page: Page, + elements: list[ElementItemCreate], + element_mapping: dict[str, tuple[Any, ElementItemCreate]], + tool_helpers: "ToolHelpers", +) -> list[str]: + """Generate and apply formulas for elements that need them. + + Returns a list of error messages for elements whose formulas could + not be generated (empty list on full success). + """ + + errors: list[str] = [] + context = BuilderFormulaContext(page) + context.load_page_context() + generate_formulas = get_formula_generator(BUILDER_FORMULA_PROMPT) + + for el_create in elements: + ref = el_create.ref + if ref not in element_mapping: + continue + + orm_element, _el_create = element_mapping[ref] + + # Push collection context if inside a repeat/table + pushed = False + try: + ancestor = ElementHandler().get_first_ancestor_of_type( + orm_element.id, CollectionElementTypeMixin + ) + except KeyError: + # Parent element may be on a different page (e.g. shared page header) + ancestor = None + if ancestor: + context.push_current_record_context(ancestor.data_source_id) + pushed = True + elif ( + isinstance( + element_type_registry.get(el_create.type), CollectionElementTypeMixin + ) + and hasattr(orm_element, "data_source_id") + and orm_element.data_source_id + ): + context.push_current_record_context(orm_element.data_source_id) + pushed = True + + try: + formulas = el_create.get_formulas_to_create(orm_element, context) + if formulas: + tool_helpers.update_status( + _("Generating formulas for element '%(ref)s'...") % {"ref": ref} + ) + with transaction.atomic(): + try: + generated = generate_formulas(formulas, context) + if generated: + el_create.update_with_formulas(user, orm_element, generated) + except Exception as exc: + logger.error( + "Failed to generate formulas for element {}: {}", + orm_element.id, + exc, + ) + errors.append(f"Formula generation failed for '{ref}': {exc}") + finally: + if pushed: + context.pop_current_record_context() + + return errors + + +def update_data_source_formulas( + user: "AbstractUser", + page: Page, + ds_pairs: list[tuple[Any, DataSourceCreate]], + tool_helpers: "ToolHelpers", +) -> list[str]: + """Generate and apply formulas for data sources that need them. + + Returns a list of error messages for data sources whose formulas could + not be generated (empty list on full success). + """ + + errors: list[str] = [] + if not ds_pairs: + return errors + + context = BuilderFormulaContext(page) + context.load_page_context() + generate_formulas = get_formula_generator(BUILDER_FORMULA_PROMPT) + + for orm_ds, ds_create in ds_pairs: + try: + formulas = ds_create.get_formulas_to_create(orm_ds, context) + if formulas: + tool_helpers.update_status( + _("Generating formulas for data source '%(name)s'...") + % {"name": ds_create.name} + ) + with transaction.atomic(): + try: + generated = generate_formulas(formulas, context) + if generated: + ds_create.update_with_formulas(user, orm_ds, generated) + except Exception as exc: + logger.error( + "Failed to generate formulas for data source {}: {}", + orm_ds.id, + exc, + ) + errors.append( + f"Formula generation failed for data source " + f"'{ds_create.name}': {exc}" + ) + except Exception as exc: + logger.error( + "Error processing data source {} for formulas: {}", orm_ds.id, exc + ) + errors.append(f"Error processing data source '{ds_create.name}': {exc}") + + return errors + + +def update_single_data_source_formulas( + user: "AbstractUser", + page: Page, + orm_ds: Any, + ds_update: DataSourceUpdate, + tool_helpers: "ToolHelpers", +) -> None: + """Generate and apply formulas for a single updated data source.""" + + from baserow.contrib.builder.data_sources.handler import DataSourceHandler + from baserow.contrib.builder.data_sources.service import DataSourceService + from baserow.core.services.registries import service_type_registry + + context = BuilderFormulaContext(page) + context.load_page_context() + + formulas = ds_update.get_formulas_to_update(orm_ds, context) + if not formulas: + return + + tool_helpers.update_status( + _("Generating formulas for data source %(id)d...") + % {"id": ds_update.data_source_id} + ) + generate_formulas = get_formula_generator(BUILDER_FORMULA_PROMPT) + with transaction.atomic(): + try: + generated = generate_formulas(formulas, context) + if generated: + service_kwargs: dict[str, Any] = {} + if "row_id" in generated: + service_kwargs["row_id"] = BaserowFormulaObject.create( + generated["row_id"], mode=BASEROW_FORMULA_MODE_ADVANCED + ) + if "search_query" in generated: + service_kwargs["search_query"] = BaserowFormulaObject.create( + generated["search_query"], + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + if service_kwargs: + ds_for_update = DataSourceHandler().get_data_source_for_update( + orm_ds.id + ) + service_type = service_type_registry.get_by_model( + ds_for_update.service.specific + ) + DataSourceService().update_data_source( + user, + ds_for_update, + service_type=service_type, + **service_kwargs, + ) + except Exception as exc: + logger.exception( + "Failed to generate formulas for data source {}: {}", + orm_ds.id, + exc, + ) + + +def update_single_element_formulas( + user: "AbstractUser", + page: Page, + orm_element: Any, + element_update: ElementUpdate, + element_type: str, + tool_helpers: "ToolHelpers", +) -> None: + """Generate and apply formulas for a single updated element.""" + + from baserow.contrib.builder.elements.service import ElementService + + context = BuilderFormulaContext(page) + context.load_page_context() + + # Push collection context if inside a repeat/table + pushed = False + try: + ancestor = ElementHandler().get_first_ancestor_of_type( + orm_element.id, CollectionElementTypeMixin + ) + except KeyError: + # Parent element may be on a different page (e.g. shared page header) + ancestor = None + if ancestor: + context.push_current_record_context(ancestor.data_source_id) + pushed = True + elif ( + isinstance(element_type_registry.get(element_type), CollectionElementTypeMixin) + and hasattr(orm_element, "data_source_id") + and orm_element.data_source_id + ): + context.push_current_record_context(orm_element.data_source_id) + pushed = True + + try: + formulas = element_update.get_formulas_to_update( + orm_element, context, element_type + ) + if formulas: + tool_helpers.update_status( + _("Generating formulas for element %(id)d...") + % {"id": element_update.element_id} + ) + generate_formulas = get_formula_generator(BUILDER_FORMULA_PROMPT) + with transaction.atomic(): + try: + generated = generate_formulas(formulas, context) + if generated: + kwargs = {} + for field_name, formula in generated.items(): + if "." not in field_name and hasattr( + orm_element, field_name + ): + kwargs[field_name] = BaserowFormulaObject.create( + formula, + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + if kwargs: + ElementService().update_element(user, orm_element, **kwargs) + except Exception as exc: + logger.exception( + "Failed to generate formulas for element {}: {}", + orm_element.id, + exc, + ) + finally: + if pushed: + context.pop_current_record_context() + + +def update_workflow_action_formulas( + user: "AbstractUser", + page: Page, + action_pairs: list[tuple[Any, ActionCreate]], + tool_helpers: "ToolHelpers", +) -> list[str]: + """Generate and apply formulas for workflow actions that need them. + + Returns a list of error messages for actions whose formulas could + not be generated (empty list on full success). + """ + + errors: list[str] = [] + if not action_pairs: + return errors + + context = BuilderFormulaContext(page) + context.load_page_context() + generate_formulas = get_formula_generator(BUILDER_FORMULA_PROMPT) + + for orm_action, action_create in action_pairs: + pushed = False + try: + formulas = action_create.get_formulas_to_create(orm_action, context) + + ancestor = ElementHandler().get_first_ancestor_of_type( + orm_action.element_id, CollectionElementTypeMixin + ) + if ancestor: + context.push_current_record_context(ancestor.data_source_id) + pushed = True + + if formulas: + ref = ( + action_create.element + if isinstance(action_create.element, str) + else f"element_{orm_action.element_id}" + ) + tool_helpers.update_status( + _("Generating formulas for action on '%(ref)s'...") % {"ref": ref} + ) + with transaction.atomic(): + try: + generated = generate_formulas(formulas, context) + if generated: + action_create.update_with_formulas(orm_action, generated) + orm_action.refresh_from_db() + workflow_action_updated.send( + None, workflow_action=orm_action, user=user + ) + except Exception as exc: + logger.error( + "Failed to generate formulas for action {}: {}", + orm_action.id, + exc, + ) + errors.append( + f"Formula generation failed for action on '{ref}': {exc}" + ) + except Exception as exc: + logger.error( + "Error processing action {} for formulas: {}", orm_action.id, exc + ) + errors.append( + f"Error processing action on element '{action_create.element}': {exc}" + ) + finally: + if pushed: + context.pop_current_record_context() + + return errors diff --git a/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/helpers.py b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/helpers.py new file mode 100644 index 0000000000..fed32b3260 --- /dev/null +++ b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/helpers.py @@ -0,0 +1,987 @@ +""" +Shared helpers for the builder assistant tools. + +Contains permission-checked accessors, listing functions, and the element/data +source/action creation orchestrators used by ``tools.py`` and ``agents.py``. +""" + +from typing import TYPE_CHECKING, Any + +from django.contrib.auth.models import AbstractUser + +from baserow.contrib.builder.data_sources.handler import DataSourceHandler +from baserow.contrib.builder.data_sources.service import DataSourceService +from baserow.contrib.builder.elements.exceptions import ElementDoesNotExist +from baserow.contrib.builder.elements.handler import ElementHandler +from baserow.contrib.builder.elements.registries import element_type_registry +from baserow.contrib.builder.elements.service import ElementService +from baserow.contrib.builder.models import Builder +from baserow.contrib.builder.operations import ListPagesBuilderOperationType +from baserow.contrib.builder.pages.handler import PageHandler +from baserow.contrib.builder.pages.models import Page +from baserow.contrib.builder.pages.service import PageService +from baserow.contrib.builder.workflow_actions.registries import ( + builder_workflow_action_type_registry, +) +from baserow.contrib.builder.workflow_actions.service import ( + BuilderWorkflowActionService, +) +from baserow.core.handler import CoreHandler +from baserow.core.integrations.models import Integration +from baserow.core.integrations.registries import integration_type_registry +from baserow.core.integrations.service import IntegrationService +from baserow.core.models import Workspace +from baserow.core.service import CoreService +from baserow.core.services.registries import service_type_registry + +from .types import ( + ActionCreate, + ActionItem, + DataSourceCreate, + DataSourceItem, + DataSourceUpdate, + ElementItem, + ElementItemCreate, + ElementMove, + ElementStyleUpdate, + ElementUpdate, + PageCreate, + PageItem, + PageUpdate, +) + +if TYPE_CHECKING: + pass + + +# --------------------------------------------------------------------------- +# Accessors +# --------------------------------------------------------------------------- + + +def get_builder( + user: AbstractUser, workspace: Workspace, application_id: int +) -> Builder: + """Get a builder application scoped to the user's workspace.""" + + from baserow.core.service import CoreService + + try: + return CoreService().get_application( + user, + application_id, + base_queryset=Builder.objects.filter(workspace=workspace), + ) + except Exception: + raise ToolInputError( + f"Application with ID {application_id} not found in this workspace. " + "Use list_builders to find valid application IDs." + ) + + +class ToolInputError(Exception): + """Raised when tool input is invalid — returned to the model as an error message.""" + + +def get_page(user: AbstractUser, page_id: int) -> Page: + """Get a page with permission check.""" + + try: + return PageService().get_page(user, page_id) + except Exception: + raise ToolInputError( + f"Page with ID {page_id} not found or not accessible. " + "Use list_pages to find valid page IDs." + ) + + +def get_local_baserow_integration(user: AbstractUser, builder: Builder) -> Integration: + """Get or create the LocalBaserow integration for a builder.""" + + integrations = IntegrationService().get_integrations(user, builder) + for integration in integrations: + if integration.get_type().type == "local_baserow": + return integration.specific + + local_baserow_type = integration_type_registry.get("local_baserow") + return IntegrationService().create_integration( + user, local_baserow_type, builder, name="Local Baserow" + ) + + +# --------------------------------------------------------------------------- +# Listing +# --------------------------------------------------------------------------- + + +def list_pages(user: AbstractUser, builder: Builder) -> list[PageItem]: + """List all non-shared pages in a builder.""" + pages = CoreHandler().filter_queryset( + user, + ListPagesBuilderOperationType.type, + PageHandler().get_pages(builder, Page.objects.filter(shared=False)), + workspace=builder.workspace, + ) + return [PageItem.from_orm(p) for p in pages] + + +def list_data_sources(user: AbstractUser, page: Page) -> list[DataSourceItem]: + """List all data sources on a page.""" + return [ + DataSourceItem.from_orm(ds) + for ds in DataSourceService().get_data_sources(user, page) + ] + + +def list_elements(user: AbstractUser, page: Page) -> list[ElementItem]: + """List all elements on a page, including shared elements visible on it.""" + elements = list(ElementService().get_elements(user, page)) + + # Also include shared elements (headers/footers) visible on this page + if not page.shared: + shared_page = page.builder.shared_page + shared_elements = ElementService().get_elements(user, shared_page) + elements = list(shared_elements) + elements + + return [ElementItem.from_orm(el) for el in elements] + + +def list_workflow_actions(user: AbstractUser, page: Page) -> list[ActionItem]: + """List all workflow actions on a page.""" + return [ + ActionItem.from_orm(a) + for a in BuilderWorkflowActionService().get_workflow_actions(user, page) + ] + + +# --------------------------------------------------------------------------- +# Page creation +# --------------------------------------------------------------------------- + + +def create_page(user: AbstractUser, builder: Builder, page_create: PageCreate) -> Page: + """Create a page in a builder application.""" + + from baserow.contrib.builder.pages.service import PageService + + svc = PageService() + page = svc.create_page( + user, + builder, + page_create.name, + page_create.path, + path_params=[p.model_dump() for p in page_create.path_params], + query_params=[p.model_dump() for p in page_create.query_params], + ) + + # PageService.create_page doesn't accept visibility/role kwargs, + # so we update them separately if non-default. + update_kwargs: dict = {} + if page_create.visibility != "all": + update_kwargs["visibility"] = page_create.visibility + if page_create.role_type != "allow_all": + update_kwargs["role_type"] = page_create.role_type + if page_create.roles: + update_kwargs["roles"] = page_create.roles + if update_kwargs: + page = svc.update_page(user, page, **update_kwargs) + + return page + + +# --------------------------------------------------------------------------- +# Page update +# --------------------------------------------------------------------------- + + +def update_page( + user: AbstractUser, + page_update: PageUpdate, +) -> Page: + """ + Update an existing page by ID. + + Returns the updated page. + """ + + from baserow.contrib.builder.pages.service import PageService + + page = get_page(user, page_update.page_id) + kwargs = page_update.to_update_kwargs() + if kwargs: + PageService().update_page(user, page, **kwargs) + page.refresh_from_db() + return page + + +# --------------------------------------------------------------------------- +# Data source creation +# --------------------------------------------------------------------------- + + +def create_data_source( + user: AbstractUser, + page: Page, + ds_create: DataSourceCreate, + integration: Integration, +) -> tuple[Any, int]: + """Create a data source on a page.""" + + service_type = service_type_registry.get(ds_create.get_service_type()) + service_kwargs = ds_create.to_service_kwargs(user, page.builder.workspace) + service_kwargs["integration"] = integration + + data_source = DataSourceService().create_data_source( + user=user, + page=page, + name=ds_create.name, + service_type=service_type, + **service_kwargs, + ) + + # Add sortings + sortings = ds_create.get_sortings() + if sortings: + from baserow.contrib.integrations.local_baserow.models import ( + LocalBaserowTableServiceSort, + ) + + LocalBaserowTableServiceSort.objects.bulk_create( + [ + LocalBaserowTableServiceSort( + service=data_source.service, + field_id=s["field_id"], + order_by=s["order_by"], + order=i, + ) + for i, s in enumerate(sortings) + ] + ) + + return data_source, data_source.id + + +# --------------------------------------------------------------------------- +# Data source update +# --------------------------------------------------------------------------- + + +def update_data_source( + user: AbstractUser, + ds_update: DataSourceUpdate, + workspace: Any, +) -> tuple[Any, str]: + """ + Update an existing data source by ID. + + Returns ``(orm_data_source, service_type_str)``. + """ + + from baserow.core.services.registries import service_type_registry + + try: + ds = DataSourceHandler().get_data_source_for_update(ds_update.data_source_id) + except Exception: + raise ToolInputError( + f"Data source with ID {ds_update.data_source_id} not found. " + "Use list_data_sources to find valid data source IDs." + ) + + service_type = ( + service_type_registry.get_by_model(ds.service.specific) if ds.service else None + ) + kwargs = ds_update.to_update_kwargs(user, workspace) + if kwargs: + ds = DataSourceService().update_data_source( + user, ds, service_type=service_type, **kwargs + ) + + ds_type = ds.service.get_type().type if ds.service else "" + return ds, ds_type + + +# --------------------------------------------------------------------------- +# Element creation +# --------------------------------------------------------------------------- + + +def create_element( + user: AbstractUser, + page: Page, + element_create: ElementItemCreate, + ref_to_id_map: dict[str, int], + data_source_ref_to_id_map: dict[str, int], + shared_page_refs: set[str] | None = None, + before_id: int | None = None, +) -> tuple[Any, int, list]: + """ + Create an element on a page, resolving refs to IDs. + + Returns ``(orm_element, element_id, action_pairs)`` where + *action_pairs* is a list of ``(orm_action, action_create)`` tuples + produced by post-create hooks (e.g. table button columns). + """ + + if shared_page_refs is None: + shared_page_refs = set() + + element_type = element_type_registry.get(element_create.type) + + # Determine target page + use_shared_page = element_create.use_shared_page + parent = element_create.parent_element + if isinstance(parent, str) and parent in shared_page_refs: + use_shared_page = True + elif isinstance(parent, int): + # Check if the parent element lives on the shared page + try: + parent_el = ElementHandler().get_element(parent) + if parent_el.page.shared: + use_shared_page = True + except Exception: + pass + + target_page = page.builder.shared_page if use_shared_page else page + if use_shared_page: + shared_page_refs.add(element_create.ref) + + # Resolve data source ref to integer ID early so that to_orm_kwargs + # (e.g. _convert_table_fields) can look up the data source's table fields. + ds = element_create.data_source + if isinstance(ds, str) and ds in data_source_ref_to_id_map: + element_create.data_source = data_source_ref_to_id_map[ds] + + kwargs = element_create.to_orm_kwargs(user, target_page) + + # Resolve parent + if isinstance(parent, int): + kwargs["parent_element_id"] = parent + elif isinstance(parent, str): + if parent not in ref_to_id_map: + raise ValueError( + f"Parent ref '{parent}' not found. " + "Define parent elements before children." + ) + kwargs["parent_element_id"] = ref_to_id_map[parent] + + if element_create.place_in_container: + kwargs["place_in_container"] = element_create.place_in_container + elif "parent_element_id" in kwargs: + try: + parent = ElementHandler().get_element(kwargs["parent_element_id"]) + if parent.get_type().type == "column": + kwargs["place_in_container"] = "0" + except Exception: + pass + + # Set data_source_id in kwargs (may already be set by to_orm_kwargs) + if isinstance(element_create.data_source, int): + kwargs["data_source_id"] = element_create.data_source + + before = None + if before_id is not None: + try: + before = ElementService().get_element(user, before_id) + except ElementDoesNotExist: + pass + + element = ElementService().create_element( + user, element_type, target_page, before=before, **kwargs + ) + + action_pairs = element_create.post_create(user, element, target_page) + return element, element.id, action_pairs + + +# --------------------------------------------------------------------------- +# Element update +# --------------------------------------------------------------------------- + + +def move_element( + user: AbstractUser, + element_move: ElementMove, +) -> Any: + """ + Move an element to a new position/parent on its page. + + Returns the moved ORM element. + """ + + try: + element = ElementHandler().get_element_for_update(element_move.element_id) + except ElementDoesNotExist: + raise ToolInputError( + f"Element with ID {element_move.element_id} not found. " + "Use list_elements to find valid element IDs." + ) + + parent = None + if element_move.parent_element_id is not None: + try: + parent = ElementHandler().get_element(element_move.parent_element_id) + except ElementDoesNotExist: + raise ToolInputError( + f"Parent element with ID {element_move.parent_element_id} not found." + ) + + before = None + if element_move.before_id is not None: + try: + before = ElementHandler().get_element(element_move.before_id) + except ElementDoesNotExist: + raise ToolInputError( + f"Before element with ID {element_move.before_id} not found." + ) + + place = element_move.place_in_container or "" + + return ElementService().move_element(user, element, parent, place, before=before) + + +def update_element( + user: AbstractUser, + element_update: ElementUpdate, +) -> tuple[Any, str]: + """ + Update an existing element by ID. + + If the element is a header/footer and ``menu_items`` are provided, + automatically finds or creates a child menu element and sets the + items on it (headers are containers, not menus themselves). + + Returns ``(orm_element, element_type_str)``. + """ + + try: + element = ElementHandler().get_element_for_update(element_update.element_id) + except ElementDoesNotExist: + raise ToolInputError( + f"Element with ID {element_update.element_id} not found. " + "Use list_elements to find valid element IDs." + ) + + element_type = element.get_type().type + kwargs = element_update.to_update_kwargs(element_type) + if kwargs: + element = ElementService().update_element(user, element, **kwargs) + + # Headers/footers are containers — menu_items belong on a child menu. + if element_type in ("header", "footer") and element_update.menu_items: + _ensure_child_menu(user, element, element_update) + + return element, element_type + + +def _ensure_child_menu( + user: AbstractUser, + header_element: Any, + element_update: ElementUpdate, +) -> None: + """Find or create a menu element inside a header/footer, then set its items.""" + + import uuid + + handler = ElementHandler() + children = handler.get_elements(header_element.page) + menu_child = None + for child in children: + if ( + child.parent_element_id == header_element.id + and child.get_type().type == "menu" + ): + menu_child = child + break + + menu_items_orm = [ + { + "uid": str(uuid.uuid4()), + "type": "link", + "variant": "link", + "name": item.name, + "navigation_type": "page", + "navigate_to_page_id": item.page_id, + "target": "self", + } + for item in element_update.menu_items + ] + + if menu_child is not None: + ElementService().update_element(user, menu_child, menu_items=menu_items_orm) + else: + menu_type = element_type_registry.get("menu") + ElementService().create_element( + user, + menu_type, + header_element.page, + parent_element_id=header_element.id, + menu_items=menu_items_orm, + ) + + +# --------------------------------------------------------------------------- +# Element style update +# --------------------------------------------------------------------------- + + +def update_element_style( + user: AbstractUser, + style_update: ElementStyleUpdate, +) -> tuple[Any, str]: + """ + Update an element's visual styles (box model + theme overrides). + + Returns ``(orm_element, element_type_str)``. + """ + + try: + element = ElementHandler().get_element_for_update(style_update.element_id) + except ElementDoesNotExist: + raise ToolInputError( + f"Element with ID {style_update.element_id} not found. " + "Use list_elements to find valid element IDs." + ) + + element_type = element.get_type().type + existing_styles = getattr(element, "styles", None) or {} + kwargs = style_update.to_update_kwargs(element_type, existing_styles) + if kwargs: + element = ElementService().update_element(user, element, **kwargs) + return element, element_type + + +# --------------------------------------------------------------------------- +# Workflow action creation +# --------------------------------------------------------------------------- + + +def _resolve_event(element_id: int, event: str) -> str: + """ + Resolve a human-friendly event name to the actual event string for + any element type. + + For elements with button collection fields (e.g. ``TableElement``), + the LLM typically sends ``"click"`` or ``"_click"`` + which must be resolved to ``"{uid}_click"`` where ``uid`` is the + ``CollectionField.uid``. + + For all other elements (``ButtonElement``, ``FormContainerElement``, + etc.) the event is returned unchanged since they use static event + names (``"click"``, ``"submit"``, ``"after_login"``). + """ + + try: + element = ElementHandler().get_element(element_id).specific + except Exception: + return event + + # Check if the element has a `fields` relation to CollectionField + # (currently TableElement; works for any future collection element). + if not hasattr(element, "fields"): + return event + + button_fields = list(element.fields.filter(type="button").order_by("order")) + if not button_fields: + return event + + # Already a UUID-prefixed event — no resolution needed + if "_" in event: + prefix = event.rsplit("_", 1)[0] + button_uids = {str(bf.uid) for bf in button_fields} + if prefix in button_uids: + return event + + # "click" → match to the first (or only) button column + if event == "click": + return f"{button_fields[0].uid}_click" + + # "_click" → match by name (case-insensitive) + if event.endswith("_click"): + name = event[: -len("_click")].strip().lower() + for bf in button_fields: + if bf.name.strip().lower() == name: + return f"{bf.uid}_click" + + # Fallback: use the first button column when no name matches. + # This is intentional — the LLM may send an unrecognised event name + # (e.g. a typo) and we prefer a working action over an error. + return f"{button_fields[0].uid}_click" + + +def create_workflow_action( + user: AbstractUser, + page: Page, + action_create: ActionCreate, + element_ref_to_id_map: dict[str, int], + data_source_ref_to_id_map: dict[str, int], + integration: Integration | None = None, +) -> tuple[Any, int]: + """Create a workflow action attached to an element.""" + + # Resolve element + el = action_create.element + if isinstance(el, int): + element_id = el + elif isinstance(el, str): + if el not in element_ref_to_id_map: + raise ValueError(f"Element ref '{el}' not found.") + element_id = element_ref_to_id_map[el] + else: + raise ValueError("element is required for workflow actions.") + + action_type = builder_workflow_action_type_registry.get( + action_create.get_action_type() + ) + + # Resolve human-friendly event names (e.g. "click" → "{uid}_click" + # for collection elements with button fields). + event = _resolve_event(element_id, action_create.event) + + kwargs: dict[str, Any] = { + "page": page, + "element_id": element_id, + "event": event, + } + kwargs.update(action_create.to_orm_kwargs()) + + service_kwargs = action_create.to_service_kwargs(user, page.builder.workspace) + if service_kwargs is not None: + if integration: + service_kwargs["integration"] = integration + field_mappings = action_create.get_field_mappings() + if field_mappings: + service_kwargs["field_mappings"] = field_mappings + kwargs["service"] = service_kwargs + + # Resolve data source for refresh_data_source + ds = action_create.data_source + if isinstance(ds, str) and ds in data_source_ref_to_id_map: + kwargs["data_source_id"] = data_source_ref_to_id_map[ds] + elif isinstance(ds, int): + kwargs["data_source_id"] = ds + + action = BuilderWorkflowActionService().create_workflow_action( + user, action_type, **kwargs + ) + return action, action.id + + +def create_table_button_actions( + user: AbstractUser, + page: Page, + orm_element: Any, + element_create: ElementItemCreate, + integration: Integration | None = None, +) -> list[tuple[Any, Any]]: + """ + Create workflow actions for button columns in a table element. + + Maps button fields to their collection field UIDs and creates actions + with ``event="{uid}_click"``. + """ + + if not element_create.fields: + return [] + + collection_fields = list(orm_element.fields.order_by("order")) + created = [] + + for i, field_cfg in enumerate(element_create.fields or []): + if field_cfg.type != "button": + continue + if i >= len(collection_fields): + continue + + # Button columns don't have inline workflow_actions in the flat model, + # so this hook is a placeholder for future extension. + # The ab-tools-no-loaders branch used discriminated union button configs + # with embedded workflow_actions — we don't replicate that here since + # workflow actions are created separately via create_actions tool. + + return created + + +# --------------------------------------------------------------------------- +# Field mapping +# --------------------------------------------------------------------------- + + +def add_field_mapping_to_action( + user: AbstractUser, action_id: int, field_id: int, value_formula: str +) -> dict[str, Any]: + """Add or update a field mapping on a create_row/update_row workflow action.""" + + from baserow.contrib.integrations.local_baserow.models import ( + LocalBaserowTableServiceFieldMapping, + ) + from baserow.core.formula.types import ( + BASEROW_FORMULA_MODE_ADVANCED, + BaserowFormulaObject, + ) + + action = BuilderWorkflowActionService().get_workflow_action(user, action_id) + action_type = action.get_type().type + + if action_type not in ("create_row", "update_row"): + raise ValueError( + f"Cannot add field mappings to '{action_type}'. " + "Only create_row and update_row support field mappings." + ) + + service = action.service.specific + + existing = LocalBaserowTableServiceFieldMapping.objects_and_trash.filter( + service=service, field_id=field_id + ).first() + + if existing: + existing.value = BaserowFormulaObject.create( + value_formula, mode=BASEROW_FORMULA_MODE_ADVANCED + ) + existing.enabled = True + existing.save() + status = "updated" + else: + LocalBaserowTableServiceFieldMapping.objects.create( + service=service, + field_id=field_id, + value=BaserowFormulaObject.create( + value_formula, mode=BASEROW_FORMULA_MODE_ADVANCED + ), + enabled=True, + ) + status = "created" + + mappings = [ + { + "field_id": m.field_id, + "field_name": m.field.name, + "value": str(m.value) if m.value else "", + } + for m in service.field_mappings.all() + ] + + return {"status": status, "field_mappings": mappings} + + +# --------------------------------------------------------------------------- +# User source helpers +# --------------------------------------------------------------------------- + + +def create_users_table( + user: AbstractUser, + database_id: int, + workspace: Workspace, + roles: list[str], +): + """ + Create a new users table with Name, Email, Password, and Role fields. + + :returns: (table, field_map) where field_map has keys + "name", "email", "password", "role". + """ + + from baserow.contrib.database.fields.actions import CreateFieldActionType + from baserow.contrib.database.fields.models import Field + from baserow.contrib.database.models import Database + from baserow.contrib.database.table.actions import CreateTableActionType + + database = ( + CoreService() + .list_applications_in_workspace( + user, workspace, base_queryset=Database.objects.filter(id=database_id) + ) + .first() + ) + if not database: + raise ValueError(f"Database with ID {database_id} not found in this workspace.") + table, _ = CreateTableActionType.do(user, database, "Users", fill_example=False) + + # The table comes with a primary "Name" text field already + name_field = Field.objects.get(table=table, primary=True) + + email_field = CreateFieldActionType.do(user, table, "email", name="Email") + password_field = CreateFieldActionType.do(user, table, "password", name="Password") + role_field = CreateFieldActionType.do( + user, + table, + "single_select", + name="Role", + select_options=[{"value": r, "color": "blue"} for r in roles], + ) + + # Add example users, one per role + from baserow.contrib.database.rows.actions import CreateRowsActionType + + role_options = {opt.value: opt.id for opt in role_field.select_options.all()} + example_rows = [] + for i, role_name in enumerate(roles, start=1): + example_rows.append( + { + name_field.db_column: role_name, + email_field.db_column: f"{role_name.lower()}@example.com", + role_field.db_column: role_options.get(role_name), + } + ) + if example_rows: + CreateRowsActionType.do(user, table, example_rows, model=table.get_model()) + + return table, { + "name": name_field, + "email": email_field, + "password": password_field, + "role": role_field, + "hint": "Remember to set a password for each user to enable login!", + } + + +def resolve_existing_table( + user: AbstractUser, + workspace: Workspace, + table_id: int, +): + """ + Validate an existing table for use as a user source. + + Auto-detects email, name, password, and role fields by type and name. + Creates a password field if one doesn't exist. + + :returns: (table, field_map) with keys "name", "email", "password", + and optionally "role". + :raises ValueError: If required fields can't be detected. + """ + + from baserow.contrib.database.fields.actions import CreateFieldActionType + from baserow.contrib.database.fields.models import ( + EmailField, + Field, + LongTextField, + PasswordField, + SingleSelectField, + TextField, + ) + from baserow.core.db import specific_iterator + from baserow_enterprise.assistant.tools.database.helpers import filter_tables + + table = filter_tables(user, workspace).get(id=table_id) + + fields_qs = Field.objects.filter(table=table).order_by("order", "id") + fields = list(specific_iterator(fields_qs.select_related("content_type"))) + + field_map: dict[str, Any] = {} + + for field in fields: + name_lower = field.name.lower() + + if "email" not in field_map: + if isinstance(field, EmailField): + field_map["email"] = field + elif ( + isinstance(field, (TextField, LongTextField)) and "email" in name_lower + ): + field_map["email"] = field + + if "name" not in field_map: + if isinstance(field, TextField) and "name" in name_lower: + field_map["name"] = field + + if "password" not in field_map: + if isinstance(field, PasswordField): + field_map["password"] = field + + if "role" not in field_map: + if isinstance(field, SingleSelectField) and "role" in name_lower: + field_map["role"] = field + elif isinstance(field, TextField) and "role" in name_lower: + field_map["role"] = field + + # Fall back to primary field for name + if "name" not in field_map: + for field in fields: + if field.primary: + field_map["name"] = field + break + + missing = [] + if "email" not in field_map: + missing.append("email (EmailField or TextField with 'email' in name)") + if "name" not in field_map: + missing.append("name (TextField with 'name' in name, or a primary field)") + if missing: + raise ValueError( + f"Table '{table.name}' is missing required fields: {', '.join(missing)}" + ) + + # Create password field if missing + if "password" not in field_map: + field_map["password"] = CreateFieldActionType.do( + user, table, "password", name="Password" + ) + + return table, field_map + + +def create_user_source( + user: AbstractUser, + application: Builder, + name: str, + table, + field_map: dict, + integration: Integration, +): + """ + Create a Local Baserow user source with password authentication. + + :param field_map: Must have "name", "email", "password"; optionally "role". + :returns: The created user source. + """ + + from baserow.core.user_sources.registries import user_source_type_registry + from baserow.core.user_sources.service import UserSourceService + + us_type = user_source_type_registry.get("local_baserow") + + kwargs: dict[str, Any] = { + "name": name, + "table_id": table.id, + "integration": integration, + "email_field_id": field_map["email"].id, + "name_field_id": field_map["name"].id, + "auth_providers": [ + { + "type": "local_baserow_password", + "password_field_id": field_map["password"].id, + } + ], + } + + if "role" in field_map: + kwargs["role_field_id"] = field_map["role"].id + + return UserSourceService().create_user_source(user, us_type, application, **kwargs) + + +def create_login_page( + user: AbstractUser, builder: Builder, user_source_id: int +) -> Page: + """ + Create a login page with an auth_form element and set it as the + builder's login page. + """ + + from baserow.contrib.builder.elements.registries import element_type_registry + from baserow.contrib.builder.elements.service import ElementService + from baserow.contrib.builder.pages.service import PageService + from baserow.core.handler import CoreHandler + + page = PageService().create_page(user, builder, "Login", "/login") + + auth_form_type = element_type_registry.get("auth_form") + ElementService().create_element( + user, auth_form_type, page, user_source_id=user_source_id + ) + + CoreHandler().update_application(user, builder, login_page_id=page.id) + builder.refresh_from_db() + return page diff --git a/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/prompts.py b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/prompts.py new file mode 100644 index 0000000000..7fa7d7c88f --- /dev/null +++ b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/prompts.py @@ -0,0 +1,51 @@ +""" +Builder-specific formula generation prompt. + +Used by ``agents.py`` to configure the formula generator agent. +""" + +from baserow_enterprise.assistant.tools.shared.formula_prompt import FORMULA_LANGUAGE + +BUILDER_FORMULA_PROMPT = ( + FORMULA_LANGUAGE + + """\ + +## Context: Application Builder + +In builder formulas, data is accessed through these providers: + +| Provider | Path format | Description | +|---|---|---| +| data_source | `data_source..field_` | Single-row data source field | +| data_source (list) | `data_source..0.field_` | First item of a list data source | +| data_source_context | `data_source_context..total_count` | List data source metadata | +| current_record | `current_record.field_` | Current row inside repeat/table elements | +| page_parameter | `page_parameter.` | URL page parameters | +| form_data | `form_data.` | Form input values | +| user | `user.email`, `user.id`, `user.username`, `user.role`, `user.is_authenticated` | Current user info | + +**Rules:** +1. Use context_metadata to find correct data source IDs and field IDs +2. Always use field_ format (e.g., field_123), NOT field names +3. Inside collection elements (table, repeat), use current_record for the row being rendered (e.g., get('current_record.field_123')). data_source..0 is the first row of the entire list — it does NOT change per row. +4. Skip fields marked with [optional] if no suitable data exists +5. If **feedback** is provided, use it to refine or correct the generated formulas +6. Return valid formulas that evaluate against the provided context + +**Example:** +Input: +fields_to_resolve: {"value": "the product name from the products data source"} +context: {"data_source.5": [{"id": 1, "field_123": "Widget A", "field_124": 29.99}]} +context_metadata: {"data_source.5": {"name": "Products", "returns_list": true, "fields": {"field_123": {"id": 123, "name": "Name", "type": "text"}, "field_124": {"id": 124, "name": "Price", "type": "number"}}}} +Output: +generated_formulas: {"value": "get('data_source.5.0.field_123')"} + +**Example (inside collection element — current_record in context):** +Input: +fields_to_resolve: {"page_param_0": "the id from the projects data source"} +context: {"data_source.5": [{"id": 1, "field_123": "Widget A"}, {"id": 2, "field_123": "Widget B"}], "current_record": {"id": 1, "field_123": "Widget A"}} +context_metadata: {"data_source.5": {"name": "Projects", "returns_list": true, "fields": {"field_123": {"id": 123, "name": "Name", "type": "text"}}}, "current_record": {"desc": "Current row in the collection element. Use current_record.field_ for row values.", "field_123": {"id": 123, "name": "Name", "type": "text"}}} +Output: +generated_formulas: {"page_param_0": "get('current_record.id')"} +""" +) diff --git a/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/tool_types.py b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/tool_types.py new file mode 100644 index 0000000000..9d2323d5ff --- /dev/null +++ b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/tool_types.py @@ -0,0 +1,20 @@ +from baserow_enterprise.assistant.tools.registries import AssistantToolType + + +class BuilderToolType(AssistantToolType): + type = "builder" + + def get_tool_functions(self): + from .tools import TOOL_FUNCTIONS + + return TOOL_FUNCTIONS + + def get_toolset(self): + from .tools import builder_toolset + + return builder_toolset + + def get_routing_rules(self): + from .tools import ROUTING_RULES + + return ROUTING_RULES diff --git a/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/tools.py b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/tools.py new file mode 100644 index 0000000000..162c2f02c6 --- /dev/null +++ b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/tools.py @@ -0,0 +1,1530 @@ +""" +Builder assistant tool functions. + +All tools use the ``RunContext[AssistantDeps]`` + ``FunctionToolset`` pattern. +Page-scoped ref tracking helpers are defined at the top of this module. +""" + +from typing import Annotated, Any + +from django.db import transaction +from django.utils.translation import gettext as _ + +from pydantic import Field +from pydantic_ai import RunContext +from pydantic_ai.toolsets import FunctionToolset + +from baserow.contrib.builder.pages.handler import PageHandler +from baserow_enterprise.assistant.deps import AssistantDeps +from baserow_enterprise.assistant.types import BuilderPageNavigationType + +from . import agents, helpers +from .types import ( + ActionCreate, + CollectionElementCreate, + DataSourceCreate, + DataSourceUpdate, + DisplayElementCreate, + ElementItemCreate, + ElementMove, + ElementStyleUpdate, + ElementUpdate, + FormElementCreate, + LayoutElementCreate, + PageCreate, + PageItem, + PageUpdate, +) +from .types.user_source import UserSourceSetup + +# --------------------------------------------------------------------------- +# Page-scoped ref tracking +# --------------------------------------------------------------------------- + + +def _get_page_context(tool_helpers, page_id: int) -> dict: + """Get or create the ref-tracking context dict for a page.""" + key = f"builder_page_{page_id}" + if key not in tool_helpers.request_context: + tool_helpers.request_context[key] = { + "element_refs": {}, + "data_source_refs": {}, + } + return tool_helpers.request_context[key] + + +def _track_element_refs(tool_helpers, page_id: int, refs: dict[str, int]) -> None: + _get_page_context(tool_helpers, page_id)["element_refs"].update(refs) + + +def _get_element_refs(tool_helpers, page_id: int) -> dict[str, int]: + return _get_page_context(tool_helpers, page_id)["element_refs"].copy() + + +def _track_data_source_refs(tool_helpers, page_id: int, refs: dict[str, int]) -> None: + _get_page_context(tool_helpers, page_id)["data_source_refs"].update(refs) + + +def _get_data_source_refs(tool_helpers, page_id: int) -> dict[str, int]: + return _get_page_context(tool_helpers, page_id)["data_source_refs"].copy() + + +# --------------------------------------------------------------------------- +# Page tools +# --------------------------------------------------------------------------- + + +def list_pages( + ctx: RunContext[AssistantDeps], + application_id: Annotated[int, Field(description="The builder application ID.")], + thought: Annotated[ + str, Field(description="Brief reasoning for calling this tool.") + ], +) -> dict[str, Any]: + """\ + List all pages in an application builder. + + WHEN to use: Check existing pages, find page IDs, or verify page names before creating new ones. + WHAT it does: Lists all non-shared pages with their id, name, path, parameters, and visibility. + RETURNS: Pages, login_page_id, user_sources with table info, and available_roles. + DO NOT USE when: You already have the page IDs you need. + """ + + from baserow.core.user_sources.handler import UserSourceHandler + + user = ctx.deps.user + workspace = ctx.deps.workspace + tool_helpers = ctx.deps.tool_helpers + + builder = helpers.get_builder(user, workspace, application_id) + tool_helpers.update_status( + _("Listing pages in %(app_name)s...") % {"app_name": builder.name} + ) + + pages = helpers.list_pages(user, builder) + + user_sources = UserSourceHandler().get_user_sources(builder) + user_source_data = [] + for us in user_sources: + entry = {"id": us.id, "name": us.name} + specific = us.specific if hasattr(us, "specific") else us + if hasattr(specific, "table_id"): + entry["table_id"] = specific.table_id + user_source_data.append(entry) + + return { + "pages": [p.model_dump() for p in pages], + "login_page_id": builder.login_page_id, + "user_sources": user_source_data, + "available_roles": UserSourceHandler().get_all_roles_for_application(builder), + } + + +def create_pages( + ctx: RunContext[AssistantDeps], + application_id: Annotated[int, Field(description="The builder application ID.")], + pages: Annotated[list[PageCreate], Field(description="Pages to create.")], + thought: Annotated[ + str, Field(description="Brief reasoning for calling this tool.") + ], +) -> dict[str, Any]: + """\ + Create pages in an application builder. + + WHEN to use: User wants new pages in a builder app. + WHAT it does: Creates pages with paths and parameters. Skips duplicates by name. + RETURNS: Created pages with id, name, path. + DO NOT USE when: Pages with those names already exist — check with list_pages first. + + ## Page Setup + - Each page needs a unique name and path. + - Use path parameters like :id for dynamic routes (e.g., '/products/:id'). + - Path params must be defined in path_params array with name and type. + + ## Navigation + After creating pages, add navigation links (menu items, link elements) so users can reach them. + """ + + user = ctx.deps.user + workspace = ctx.deps.workspace + tool_helpers = ctx.deps.tool_helpers + + if not pages: + return {"created_pages": []} + + builder = helpers.get_builder(user, workspace, application_id) + + # Skip duplicates + existing = {p.name.lower(): p for p in helpers.list_pages(user, builder)} + created_pages: list[PageItem] = [] + skipped_pages: list[PageItem] = [] + + with transaction.atomic(): + for page_create in pages: + tool_helpers.raise_if_cancelled() + ex = existing.get(page_create.name.lower()) + if ex: + skipped_pages.append(ex) + continue + tool_helpers.update_status( + _("Creating page %(name)s...") % {"name": page_create.name} + ) + page = helpers.create_page(user, builder, page_create) + created_pages.append(PageItem.from_orm(page)) + + if created_pages: + last = created_pages[-1] + tool_helpers.navigate_to( + BuilderPageNavigationType( + type="builder-page", + application_id=application_id, + page_id=last.id, + page_name=last.name, + ) + ) + + result: dict[str, Any] = { + "created_pages": [p.model_dump() for p in created_pages], + } + if skipped_pages: + result["existing_pages"] = [p.model_dump() for p in skipped_pages] + if created_pages: + result["next_steps"] = ( + "Pages created. Next: create data sources (create_data_sources), " + "then elements (create_display_elements, create_layout_elements, " + "create_form_elements, create_collection_elements), " + "then actions for buttons/forms (create_actions)." + ) + return result + + +# --------------------------------------------------------------------------- +# Page update tool +# --------------------------------------------------------------------------- + + +def update_page( + ctx: RunContext[AssistantDeps], + page: Annotated[PageUpdate, Field(description="Page update data.")], + thought: Annotated[ + str, Field(description="Brief reasoning for calling this tool.") + ], +) -> dict[str, Any]: + """\ + Update an existing page's properties. + + WHEN to use: User wants to rename a page, change its path, or modify parameters. + WHAT it does: Updates the specified fields on a page. Only non-null fields are applied. + RETURNS: Updated page with id, name, path. + DO NOT USE when: You need to create a new page — use create_pages instead. + + ## Usage + - page_id: ID of the page to update (from list_pages). + - Only set the fields you want to change. + - When changing path, also update path_params if the new path has different parameters. + """ + + user = ctx.deps.user + tool_helpers = ctx.deps.tool_helpers + + tool_helpers.update_status(_("Updating page %(id)d...") % {"id": page.page_id}) + + updated_page = helpers.update_page(user, page) + page_item = PageItem.from_orm(updated_page) + + return { + "status": "ok", + "page": page_item.model_dump(), + "updated_fields": page.get_updated_field_names(), + } + + +# --------------------------------------------------------------------------- +# Data source tools +# --------------------------------------------------------------------------- + + +def list_data_sources( + ctx: RunContext[AssistantDeps], + page_id: Annotated[int, Field(description="The page ID.")], + thought: Annotated[ + str, Field(description="Brief reasoning for calling this tool.") + ], +) -> dict[str, Any]: + """\ + List all data sources on a page. + + WHEN to use: Check existing data sources or find data source IDs. + WHAT it does: Lists data sources with id, name, type, table_id. + RETURNS: Data sources array. + """ + + user = ctx.deps.user + tool_helpers = ctx.deps.tool_helpers + + page = helpers.get_page(user, page_id) + tool_helpers.update_status( + _("Listing data sources on %(name)s...") % {"name": page.name} + ) + + ds_list = helpers.list_data_sources(user, page) + return {"data_sources": [ds.model_dump() for ds in ds_list]} + + +def create_data_sources( + ctx: RunContext[AssistantDeps], + page_id: Annotated[int, Field(description="The page ID.")], + data_sources: Annotated[ + list[DataSourceCreate], Field(description="Data sources to create.") + ], + thought: Annotated[ + str, Field(description="Brief reasoning for calling this tool.") + ], +) -> dict[str, Any]: + """\ + Create data sources to connect page elements to database tables. + + WHEN to use: Page needs data from database tables for display or forms. + WHAT it does: Creates list_rows or get_row data sources. Skips duplicates by name. + RETURNS: Created data sources with ref-to-ID mapping. + DO NOT USE when: Data sources with those names already exist on the page. + + ## Data Source Types + - list_rows: Fetches multiple rows — use when the page displays a collection (table, repeat, dropdown). + - get_row: Fetches a single row by ID — use when the page works with one specific record. Set row_id with $formula: to get the ID dynamically (e.g. from a page parameter). + + ## Dynamic Values with $formula: + - get_row row_id: "$formula: the id from the page parameter" + - list_rows search_query: "$formula: the text from the search input" + + ## Filtering with view_id + To filter a list_rows data source, create a database table view with the + desired filters (using create_views + create_view_filters), then pass + its view_id here. The view's filters and sortings are applied automatically. + """ + + user = ctx.deps.user + tool_helpers = ctx.deps.tool_helpers + + if not data_sources: + return {"created_data_sources": [], "ref_to_id_map": {}} + + page = helpers.get_page(user, page_id) + integration = helpers.get_local_baserow_integration(user, page.builder) + + existing_ds = helpers.list_data_sources(user, page) + existing_by_name = {ds.name.lower(): ds for ds in existing_ds} + ref_to_id: dict[str, int] = {} + created: list[dict] = [] + ds_pairs: list[tuple] = [] + + with transaction.atomic(): + for ds_create in data_sources: + tool_helpers.raise_if_cancelled() + ex = existing_by_name.get(ds_create.name.lower()) + if not ex: + ex = next( + (ds for ds in existing_ds if ds_create.matches_existing(ds)), None + ) + if ex: + ref_to_id[ds_create.ref] = ex.id + continue + + tool_helpers.update_status( + _("Creating data source '%(name)s'...") % {"name": ds_create.name} + ) + orm_ds, ds_id = helpers.create_data_source( + user, page, ds_create, integration + ) + ref_to_id[ds_create.ref] = ds_id + ds_pairs.append((orm_ds, ds_create)) + created.append( + { + "id": ds_id, + "ref": ds_create.ref, + "name": ds_create.name, + "type": ds_create.type, + } + ) + + # Formula generation (separate transactions) + errors = agents.update_data_source_formulas(user, page, ds_pairs, tool_helpers) + + _track_data_source_refs(tool_helpers, page_id, ref_to_id) + + result: dict[str, Any] = { + "created_data_sources": created, + "ref_to_id_map": ref_to_id, + } + if errors: + result["errors"] = errors + return result + + +# --------------------------------------------------------------------------- +# Data source update tool +# --------------------------------------------------------------------------- + + +def update_data_source( + ctx: RunContext[AssistantDeps], + page_id: Annotated[ + int, Field(description="The page ID the data source belongs to.") + ], + data_source: Annotated[ + DataSourceUpdate, Field(description="Data source update data.") + ], + thought: Annotated[ + str, Field(description="Brief reasoning for calling this tool.") + ], +) -> dict[str, Any]: + """\ + Update an existing data source's properties. + + WHEN to use: User wants to change a data source's name, table, row_id, or search_query. + WHAT it does: Updates the specified fields on a data source. Only non-null fields are applied. + RETURNS: Updated data source ID and list of changed fields. + DO NOT USE when: You need to create a new data source — use create_data_sources instead. + + ## Usage + - data_source_id: ID of the data source to update (from list_data_sources). + - Only set the fields you want to change. + + ## Dynamic Values with $formula: + - row_id: "$formula: the id from the page parameter" + - search_query: "$formula: the text from the search input" + """ + + user = ctx.deps.user + workspace = ctx.deps.workspace + tool_helpers = ctx.deps.tool_helpers + + page = helpers.get_page(user, page_id) + tool_helpers.update_status( + _("Updating data source %(id)d...") % {"id": data_source.data_source_id} + ) + + with transaction.atomic(): + orm_ds, ds_type = helpers.update_data_source(user, data_source, workspace) + + # Handle formula generation for $formula: fields (separate transaction) + formulas = data_source.get_formulas_to_update(orm_ds, None) + if formulas: + agents.update_single_data_source_formulas( + user, page, orm_ds, data_source, tool_helpers + ) + + updated_fields = data_source.get_updated_field_names() + return { + "status": "ok", + "data_source_id": data_source.data_source_id, + "service_type": ds_type, + "updated_fields": updated_fields, + } + + +# --------------------------------------------------------------------------- +# Element tools +# --------------------------------------------------------------------------- + + +def list_elements( + ctx: RunContext[AssistantDeps], + page_id: Annotated[int, Field(description="The page ID.")], + thought: Annotated[ + str, Field(description="Brief reasoning for calling this tool.") + ], +) -> dict[str, Any]: + """\ + List all elements on a page. + + WHEN to use: Check existing elements, find element IDs or container structure. + WHAT it does: Lists elements with id, type, order, parent_element_id, is_container. + RETURNS: Elements array. + + Elements with page_name="[shared]" are headers/footers visible on ALL pages. + Do not add page-specific children to them. + """ + + user = ctx.deps.user + tool_helpers = ctx.deps.tool_helpers + + page = helpers.get_page(user, page_id) + tool_helpers.update_status( + _("Listing elements on %(name)s...") % {"name": page.name} + ) + + elements = helpers.list_elements(user, page) + return {"elements": [el.model_dump() for el in elements]} + + +def _create_elements_internal( + ctx: RunContext[AssistantDeps], + page_id: int, + elements: list[ElementItemCreate], + before_element_id: int | None = None, +) -> dict[str, Any]: + """Shared implementation for all create_*_elements tools.""" + + user = ctx.deps.user + tool_helpers = ctx.deps.tool_helpers + + if not elements: + return {"created_elements": [], "ref_to_id_map": {}} + + page = helpers.get_page(user, page_id) + shared_page = PageHandler().get_shared_page(page.builder) + + tool_helpers.update_status( + _("Creating %(count)d elements on %(name)s...") + % {"count": len(elements), "name": page.name} + ) + + ref_to_id: dict[str, int] = _get_element_refs(tool_helpers, page_id) + element_mapping: dict[str, tuple[Any, ElementItemCreate]] = {} + ds_ref_to_id = _get_data_source_refs(tool_helpers, page_id) + shared_page_refs: set[str] = set( + _get_element_refs(tool_helpers, shared_page.id).keys() + ) + created: list[dict] = [] + + errors: list[str] = [] + table_action_pairs: list[tuple] = [] + with transaction.atomic(): + for el_create in elements: + tool_helpers.raise_if_cancelled() + try: + element, el_id, action_pairs = helpers.create_element( + user, + page, + el_create, + ref_to_id, + ds_ref_to_id, + shared_page_refs, + before_element_id, + ) + except (ValueError, Exception) as exc: + errors.append(f"{el_create.ref}: {exc}") + continue + ref_to_id[el_create.ref] = el_id + element_mapping[el_create.ref] = (element, el_create) + table_action_pairs.extend(action_pairs) + created.append({"id": el_id, "ref": el_create.ref, "type": el_create.type}) + + # Formula generation (separate transactions) + errors.extend( + agents.update_element_formulas( + user, page, elements, element_mapping, tool_helpers + ) + ) + + if table_action_pairs: + errors.extend( + agents.update_workflow_action_formulas( + user, page, table_action_pairs, tool_helpers + ) + ) + + _track_element_refs(tool_helpers, page_id, ref_to_id) + _track_element_refs( + tool_helpers, + shared_page.id, + {r: 0 for r in ref_to_id if r in shared_page_refs}, + ) + + result: dict[str, Any] = {"created_elements": created, "ref_to_id_map": ref_to_id} + + if errors: + result["errors"] = errors + + # Guide the model to create workflow actions for interactive elements + actionable = [ + el.ref for el in elements if el.type in ("button", "link", "form_container") + ] + if actionable: + result["next_steps"] = ( + f"Elements {actionable} need workflow actions. " + "Call create_actions next: 'click' event for buttons/links, " + "'submit' event for form_container." + ) + + # Navigate to the page containing the created elements + if created: + tool_helpers.navigate_to( + BuilderPageNavigationType( + type="builder-page", + application_id=page.builder_id, + page_id=page_id, + page_name=page.name, + ) + ) + + return result + + +def create_display_elements( + ctx: RunContext[AssistantDeps], + page_id: Annotated[int, Field(description="The page ID.")], + elements: Annotated[ + list[DisplayElementCreate], Field(description="Display elements to create.") + ], + thought: Annotated[ + str, Field(description="Brief reasoning for calling this tool.") + ], + before_element_id: Annotated[ + int | None, + Field(default=None, description="Insert before this element ID."), + ] = None, +) -> dict[str, Any]: + """\ + Create display elements on a page: heading, text, button, link, image. + + PREREQUISITE: The page must already exist. Call create_pages first if it doesn't. + WHEN to use: User wants to add text content, headings, buttons, links, or images. + WHAT it does: Creates display elements with formula support for dynamic values. + RETURNS: Created elements with ref-to-ID mapping. + + ## Element Structure + - parent_element: int ID (existing container) or string ref (same batch) + - place_in_container: 0-indexed column position for column elements + + ## Dynamic Values with $formula: + - Heading/text value: "$formula: the product name from the products data source" + - Image URL: "$formula: the image URL from the product data source" + - Static text: use plain strings (auto-wrapped in quotes) + + ## After Creating Buttons/Links + Buttons/links need a click action (open_page, notification, etc.) via create_actions. + ALWAYS call create_actions after creating buttons or links. + + ## Buttons/Links in Shared Headers + - In shared headers, only use links that navigate to a FIXED page (navigate_to_page_id). + - Do NOT create "back" buttons or context-dependent navigation in shared headers. + - For page-specific navigation (back, contextual links), place buttons on the page itself. + """ + + internal = [el.to_element_item_create() for el in elements] + return _create_elements_internal(ctx, page_id, internal, before_element_id) + + +def create_layout_elements( + ctx: RunContext[AssistantDeps], + page_id: Annotated[int, Field(description="The page ID.")], + elements: Annotated[ + list[LayoutElementCreate], Field(description="Layout elements to create.") + ], + thought: Annotated[ + str, Field(description="Brief reasoning for calling this tool.") + ], + before_element_id: Annotated[ + int | None, + Field(default=None, description="Insert before this element ID."), + ] = None, +) -> dict[str, Any]: + """\ + Create layout/navigation elements on a page: column, simple_container, header, footer, menu. + + WHEN to use: User wants page structure — columns, containers, headers, footers, menus. + WHAT it does: Creates container elements that hold child elements. + RETURNS: Created elements with ref-to-ID mapping. + + ## Element Structure + - Layout elements are containers — add children via parent_element ref. + - column: creates N columns, children use place_in_container "0", "1", etc. + - menu: add menu_items to link to pages. + + ## Shared Elements (header, footer) + - Headers/footers are shared across ALL pages by default (share_type="all"). + - Use share_type="only" + page_ids to limit which pages show them. + - ONLY put absolute navigation in shared headers: links/menus to specific pages. + - NEVER put page-specific content in shared headers (e.g., "back" button, + page-specific data, breadcrumbs). These vary per page and will be wrong. + - A menu element inside a header/footer is also shared. + - Shared elements CANNOT reference page-specific data sources. + """ + + internal = [el.to_element_item_create() for el in elements] + return _create_elements_internal(ctx, page_id, internal, before_element_id) + + +def create_form_elements( + ctx: RunContext[AssistantDeps], + page_id: Annotated[int, Field(description="The page ID.")], + elements: Annotated[ + list[FormElementCreate], Field(description="Form elements to create.") + ], + thought: Annotated[ + str, Field(description="Brief reasoning for calling this tool.") + ], + before_element_id: Annotated[ + int | None, + Field(default=None, description="Insert before this element ID."), + ] = None, +) -> dict[str, Any]: + """\ + Create form elements on a page: form_container, input_text, choice, checkbox, datetime_picker, record_selector. + + WHEN to use: User wants a form to collect input data. + WHAT it does: Creates form containers and input elements with validation. + RETURNS: Created elements with ref-to-ID mapping. + + ## Form Structure + - Create a form_container first, then add inputs inside it via parent_element. + - Each input has label, placeholder, required, default_value. + - input_text: validation_type (any, email, integer), is_multiline. + - choice: choice_options, multiple. + - record_selector: needs data_source. + + ## Edit Forms + For forms that edit existing data, set default_value on each input using $formula: to reference the field value from the page's data source (e.g. "$formula: the Name field from the data source"). + The form's submit action should be update_row with row_id referencing the page parameter. + + ## After Creating Forms + Form containers need a submit action (create_row, update_row) via create_actions. + ALWAYS call create_actions after creating form_container elements. + """ + + internal = [el.to_element_item_create() for el in elements] + return _create_elements_internal(ctx, page_id, internal, before_element_id) + + +def create_collection_elements( + ctx: RunContext[AssistantDeps], + page_id: Annotated[int, Field(description="The page ID.")], + elements: Annotated[ + list[CollectionElementCreate], + Field(description="Collection elements to create."), + ], + thought: Annotated[ + str, Field(description="Brief reasoning for calling this tool.") + ], + before_element_id: Annotated[ + int | None, + Field(default=None, description="Insert before this element ID."), + ] = None, +) -> dict[str, Any]: + """\ + Create collection elements on a page: table, repeat. + + WHEN to use: User wants to display data from a data source in a table or repeating layout. + WHAT it does: Creates collection elements connected to data sources. + RETURNS: Created elements with ref-to-ID mapping. + + ## Prerequisites + Create data sources first (create_data_sources), then reference them here. + + ## Table + - data_source: the data source ID or ref. + - fields: column configurations — always specify which columns to show. Each field has name, type ("text" or "button"), and value ($formula: for dynamic content). + + ## Repeat + - data_source: the data source ID or ref. + - orientation: "vertical" or "horizontal". + - Add child elements inside the repeat via parent_element ref. + """ + + internal = [el.to_element_item_create() for el in elements] + return _create_elements_internal(ctx, page_id, internal, before_element_id) + + +# --------------------------------------------------------------------------- +# Element update tool +# --------------------------------------------------------------------------- + + +def update_element( + ctx: RunContext[AssistantDeps], + page_id: Annotated[int, Field(description="The page ID the element belongs to.")], + element: Annotated[ElementUpdate, Field(description="Element update data.")], + thought: Annotated[ + str, Field(description="Brief reasoning for calling this tool.") + ], +) -> dict[str, Any]: + """\ + Update an existing element's properties. + + WHEN to use: User wants to change properties of an existing element (text, label, settings, etc.). + WHAT it does: Updates the specified fields on an element. Only non-null fields are applied. + RETURNS: Updated element ID and list of changed fields. + DO NOT USE when: You need to move elements, change data sources, or modify styles — use other tools for those. + + ## Usage + - element_id: ID of the element to update (from list_elements). + - Only set the fields you want to change — unset fields are left unchanged. + - Invalid fields for the element type are silently ignored. + + ## Dynamic Values with $formula: + - value: "$formula: the product name from the data source" + - default_value: "$formula: the current user's email" + + ## Menu Items + - To add/replace menu items on a menu element, set menu_items with the full list. + - Each item needs name (display text) and page_id (target page). + - This REPLACES all existing items — include existing items you want to keep. + """ + + user = ctx.deps.user + tool_helpers = ctx.deps.tool_helpers + + page = helpers.get_page(user, page_id) + tool_helpers.update_status( + _("Updating element %(id)d...") % {"id": element.element_id} + ) + + with transaction.atomic(): + orm_element, element_type = helpers.update_element(user, element) + + # Handle formula generation for $formula: fields (separate transaction) + formulas = element.get_formulas_to_update(orm_element, None, element_type) + if formulas: + agents.update_single_element_formulas( + user, page, orm_element, element, element_type, tool_helpers + ) + + updated_fields = element.get_updated_field_names() + return { + "status": "ok", + "element_id": element.element_id, + "element_type": element_type, + "updated_fields": updated_fields, + } + + +# --------------------------------------------------------------------------- +# Element style tool +# --------------------------------------------------------------------------- + + +def update_element_style( + ctx: RunContext[AssistantDeps], + page_id: Annotated[int, Field(description="The page ID the element belongs to.")], + style: Annotated[ElementStyleUpdate, Field(description="Style update data.")], + thought: Annotated[ + str, Field(description="Brief reasoning for calling this tool.") + ], +) -> dict[str, Any]: + """\ + Update visual style of an element (box model + theme overrides). + + WHEN to use: User wants to change borders, padding, margins, background, width, or theme style overrides (button colors, typography, input styles, etc.). + WHAT it does: Applies box-model values and per-element-type theme overrides. + RETURNS: Updated element ID, type, and list of changed fields. + DO NOT USE when: You need to change content (text, label) or structural properties — use update_element instead. + + ## Box Model + - border_color, border_size, padding, margin: pass a single value for all 4 sides, or a dict like {"left": 0, "top": 10} to set specific sides only. + - border_radius, background_radius: corner rounding. + - background: "none" or "color", background_color: hex color. + - width: "full", "full-width", "normal", "medium", "small". + + ## Theme Style Overrides (per element type) + - button: background_color, text_color, border_color, hover colors, font_size, width, alignment. + - link: text_color, hover_text_color, font_size, font_weight. + - typography: heading_1_*/body_* text_color, font_size, font_weight, text_alignment. + - input: input_background_color, input_border_color, input_text_color, label_text_color. + - table: header/cell colors, border_color, border_size. + - image: image_alignment, max_width, max_height, border_radius. + + Only blocks valid for the element type are applied; others are ignored. + + ## Reset + Set reset=true to restore all box-model fields to defaults and clear theme overrides. + You can combine reset with new values to reset-then-apply. + """ + + user = ctx.deps.user + tool_helpers = ctx.deps.tool_helpers + + helpers.get_page(user, page_id) + tool_helpers.update_status( + _("Styling element %(id)d...") % {"id": style.element_id} + ) + + with transaction.atomic(): + element, element_type = helpers.update_element_style(user, style) + + # Report which fields were explicitly set (not inherited from existing styles) + updated_fields = list(style.to_update_kwargs(element_type, {}).keys()) + if not updated_fields: + return { + "status": "warning", + "element_id": style.element_id, + "element_type": element_type, + "message": ( + "No style fields were applied. Make sure you pass style " + "properties (padding, margin, border_size, border_color, " + "background, width, etc.) in the style parameter. " + "Theme overrides (button, link, typography, etc.) are only " + "applied if the element type supports them." + ), + } + return { + "status": "ok", + "element_id": style.element_id, + "element_type": element_type, + "updated_fields": updated_fields, + } + + +# --------------------------------------------------------------------------- +# Element move tool +# --------------------------------------------------------------------------- + + +def move_elements( + ctx: RunContext[AssistantDeps], + page_id: Annotated[int, Field(description="The page ID.")], + moves: Annotated[ + list[ElementMove], Field(description="Move operations to perform.") + ], + thought: Annotated[ + str, Field(description="Brief reasoning for calling this tool.") + ], +) -> dict[str, Any]: + """\ + Move or reorder elements on a page. + + WHEN to use: User wants to reorder elements, move elements into/out of containers, or rearrange page layout. + WHAT it does: Moves each element to a new position, parent, or container slot. + RETURNS: List of moved elements with their new positions. + DO NOT USE when: You need to create new elements — use create_*_elements instead. + + ## Parameters per move + - element_id: ID of the element to move (from list_elements). + - before_id: Place before this element. null = move to end. + - parent_element_id: New parent container. null = move to root level. + - place_in_container: Container slot (e.g. "0", "1" for columns). null = default. + """ + + user = ctx.deps.user + tool_helpers = ctx.deps.tool_helpers + + if not moves: + return {"moved_elements": []} + + page = helpers.get_page(user, page_id) + tool_helpers.update_status( + _("Moving %(count)d elements on %(name)s...") + % {"count": len(moves), "name": page.name} + ) + + moved: list[dict] = [] + errors: list[str] = [] + + for element_move in moves: + tool_helpers.raise_if_cancelled() + try: + with transaction.atomic(): + element = helpers.move_element(user, element_move) + moved.append( + { + "element_id": element.id, + "parent_element_id": element.parent_element_id, + "place_in_container": element.place_in_container, + "order": str(element.order), + } + ) + except Exception as exc: + errors.append(f"element {element_move.element_id}: {exc}") + + result: dict[str, Any] = {"moved_elements": moved} + if errors: + result["errors"] = errors + return result + + +# --------------------------------------------------------------------------- +# Workflow action tools +# --------------------------------------------------------------------------- + + +def list_actions( + ctx: RunContext[AssistantDeps], + page_id: Annotated[int, Field(description="The page ID.")], + thought: Annotated[ + str, Field(description="Brief reasoning for calling this tool.") + ], +) -> dict[str, Any]: + """\ + List all workflow actions on a page. + + WHEN to use: Check existing actions, find action IDs, or review field mappings. + WHAT it does: Lists actions with id, type, element_id, event, field_mappings. + RETURNS: Workflow actions array. + """ + + user = ctx.deps.user + tool_helpers = ctx.deps.tool_helpers + + page = helpers.get_page(user, page_id) + tool_helpers.update_status( + _("Listing actions on %(name)s...") % {"name": page.name} + ) + + actions = helpers.list_workflow_actions(user, page) + return {"workflow_actions": [a.model_dump() for a in actions]} + + +def create_actions( + ctx: RunContext[AssistantDeps], + page_id: Annotated[int, Field(description="The page ID.")], + actions: Annotated[ + list[ActionCreate], Field(description="Workflow actions to create.") + ], + thought: Annotated[ + str, Field(description="Brief reasoning for calling this tool.") + ], +) -> dict[str, Any]: + """\ + Create workflow actions attached to elements (click, submit events). + + WHEN to use: User wants buttons/forms to perform actions (navigate, create/update rows, show notifications). + WHAT it does: Creates workflow actions with formula support for dynamic values. + RETURNS: Created actions with id, type, element_ref, event. + + ## Attaching Actions + - element_ref: attach to newly created element (auto-tracked) + - element_id: attach to existing element (from list_elements) + - event: "click" for buttons/links, "submit" for form containers + + ## Action Types + - notification: Show a message (title/description are formulas) + - open_page: Navigate to another page (set navigate_to_page_id). Use page_parameters to pass context like the current row's ID to the target page's path parameters. + - create_row: Insert a row (needs table_id and field_values) + - update_row: Update a row (needs table_id, row_id, field_values) + - delete_row: Delete a row (needs table_id and row_id) + - refresh_data_source: Reload a data source + - logout: Log out the user + + ## Dynamic Values with $formula: + Use "$formula: " — describe the data you want using references or ids when possible. + - field_values: {"field_id": "123", "value": "$formula: the Name form input"} + - row_id: "$formula: the id from the page parameter" + """ + + user = ctx.deps.user + tool_helpers = ctx.deps.tool_helpers + + if not actions: + return {"created_actions": []} + + page = helpers.get_page(user, page_id) + integration = helpers.get_local_baserow_integration(user, page.builder) + + el_refs = _get_element_refs(tool_helpers, page_id) + ds_refs = _get_data_source_refs(tool_helpers, page_id) + created: list[dict] = [] + action_pairs: list[tuple] = [] + + errors: list[str] = [] + with transaction.atomic(): + for action_create in actions: + tool_helpers.raise_if_cancelled() + tool_helpers.update_status( + _("Creating %(type)s action...") % {"type": action_create.type} + ) + try: + orm_action, action_id = helpers.create_workflow_action( + user, page, action_create, el_refs, ds_refs, integration + ) + except (ValueError, Exception) as exc: + errors.append(f"{action_create.type} on {action_create.element}: {exc}") + continue + action_pairs.append((orm_action, action_create)) + created.append( + { + "id": action_id, + "type": action_create.type, + "element": action_create.element, + "event": action_create.event, + } + ) + + # Formula generation (separate transactions) + errors.extend( + agents.update_workflow_action_formulas(user, page, action_pairs, tool_helpers) + ) + + result: dict[str, Any] = {"created_actions": created} + if errors: + result["errors"] = errors + return result + + +def add_action_field_mapping( + ctx: RunContext[AssistantDeps], + action_id: Annotated[int, Field(description="The workflow action ID.")], + field_id: Annotated[int, Field(description="The target table field ID.")], + value_formula: Annotated[ + str, + Field( + description="Formula for the value, e.g. get('form_data.123') or get('page_parameter.id')." + ), + ], + thought: Annotated[ + str, Field(description="Brief reasoning for calling this tool.") + ], +) -> dict[str, Any]: + """\ + Add or update a field mapping on an existing create_row/update_row action. + + WHEN to use: Adding a new form input to an existing form that already has a row action. + WHAT it does: Maps a table field to a formula value without recreating the action. + RETURNS: Updated field mappings list. + """ + + tool_helpers = ctx.deps.tool_helpers + tool_helpers.update_status( + _("Adding field mapping to action %(id)d...") % {"id": action_id} + ) + + return helpers.add_field_mapping_to_action( + ctx.deps.user, action_id, field_id, value_formula + ) + + +# --------------------------------------------------------------------------- +# Composite page setup — phase helpers +# --------------------------------------------------------------------------- + + +def _setup_data_sources( + user, + page, + data_sources: list, + ds_ref_to_id: dict[str, int], + integration, + tool_helpers, +) -> tuple[list[dict], list[str]]: + """Create data sources, skipping duplicates by name or structural match. + + Mutates *ds_ref_to_id* in place. Returns ``(created, errors)``. + """ + + created: list[dict] = [] + errors: list[str] = [] + if not data_sources: + return created, errors + + existing_ds = helpers.list_data_sources(user, page) + existing_by_name = {ds.name.lower(): ds for ds in existing_ds} + ds_pairs: list[tuple] = [] + + with transaction.atomic(): + for ds_create in data_sources: + tool_helpers.raise_if_cancelled() + ex = existing_by_name.get(ds_create.name.lower()) + if not ex: + ex = next( + (ds for ds in existing_ds if ds_create.matches_existing(ds)), + None, + ) + if ex: + ds_ref_to_id[ds_create.ref] = ex.id + continue + tool_helpers.update_status( + _("Creating data source '%(name)s'...") % {"name": ds_create.name} + ) + try: + orm_ds, ds_id = helpers.create_data_source( + user, page, ds_create, integration + ) + ds_ref_to_id[ds_create.ref] = ds_id + ds_pairs.append((orm_ds, ds_create)) + created.append( + { + "id": ds_id, + "ref": ds_create.ref, + "name": ds_create.name, + "type": ds_create.type, + } + ) + except Exception as exc: + errors.append(f"data_source {ds_create.ref}: {exc}") + errors.extend( + agents.update_data_source_formulas(user, page, ds_pairs, tool_helpers) + ) + return created, errors + + +def _setup_elements( + user, + page, + elements: list, + el_ref_to_id: dict[str, int], + ds_ref_to_id: dict[str, int], + shared_page_refs: set[str], + tool_helpers, +) -> tuple[list[dict], list[str]]: + """Create elements in order, generate formulas, and handle table actions. + + Mutates *el_ref_to_id* and *shared_page_refs* in place. + Returns ``(created, errors)``. + """ + + created: list[dict] = [] + errors: list[str] = [] + if not elements: + return created, errors + + element_mapping: dict[str, tuple[Any, ElementItemCreate]] = {} + table_action_pairs: list[tuple] = [] + + tool_helpers.update_status( + _("Creating %(count)d elements on %(name)s...") + % {"count": len(elements), "name": page.name} + ) + with transaction.atomic(): + for el_create in elements: + tool_helpers.raise_if_cancelled() + try: + element, el_id, action_pairs = helpers.create_element( + user, + page, + el_create, + el_ref_to_id, + ds_ref_to_id, + shared_page_refs, + None, + ) + el_ref_to_id[el_create.ref] = el_id + element_mapping[el_create.ref] = (element, el_create) + table_action_pairs.extend(action_pairs) + created.append( + {"id": el_id, "ref": el_create.ref, "type": el_create.type} + ) + except Exception as exc: + errors.append(f"element {el_create.ref}: {exc}") + errors.extend( + agents.update_element_formulas( + user, page, elements, element_mapping, tool_helpers + ) + ) + if table_action_pairs: + errors.extend( + agents.update_workflow_action_formulas( + user, page, table_action_pairs, tool_helpers + ) + ) + return created, errors + + +def _setup_actions( + user, + page, + actions: list, + el_ref_to_id: dict[str, int], + ds_ref_to_id: dict[str, int], + integration, + tool_helpers, +) -> tuple[list[dict], list[str]]: + """Create workflow actions and generate their formulas. + + Returns ``(created, errors)``. + """ + + created: list[dict] = [] + errors: list[str] = [] + if not actions: + return created, errors + + action_pairs: list[tuple] = [] + with transaction.atomic(): + for action_create in actions: + tool_helpers.raise_if_cancelled() + tool_helpers.update_status( + _("Creating %(type)s action...") % {"type": action_create.type} + ) + try: + orm_action, action_id = helpers.create_workflow_action( + user, + page, + action_create, + el_ref_to_id, + ds_ref_to_id, + integration, + ) + action_pairs.append((orm_action, action_create)) + created.append( + { + "id": action_id, + "type": action_create.type, + "element": action_create.element, + "event": action_create.event, + } + ) + except Exception as exc: + errors.append( + f"action {action_create.type} on {action_create.element}: {exc}" + ) + errors.extend( + agents.update_workflow_action_formulas(user, page, action_pairs, tool_helpers) + ) + return created, errors + + +# --------------------------------------------------------------------------- +# Composite page setup tool +# --------------------------------------------------------------------------- + + +def setup_page( + ctx: RunContext[AssistantDeps], + page_id: Annotated[int, Field(description="The page ID.")], + data_sources: Annotated[ + list[DataSourceCreate] | None, + Field(default=None, description="Data sources to create."), + ] = None, + elements: Annotated[ + list[ElementItemCreate] | None, + Field(default=None, description="Elements to create (all types)."), + ] = None, + actions: Annotated[ + list[ActionCreate] | None, + Field(default=None, description="Workflow actions to create."), + ] = None, + thought: Annotated[ + str, Field(description="Brief reasoning for calling this tool.") + ] = "", +) -> dict[str, Any]: + """\ + Set up a complete page: data sources, elements, and actions in one call. + + WHEN to use: Building a complete page with data, UI elements, and interactions. + WHAT it does: Creates data sources first, then elements (in order), then actions. Handles ref resolution across all three phases. + RETURNS: Created items with ref-to-ID mappings and any errors. Partial success is possible — some items may be created even when others fail. Check the ``errors`` key. + + ## Deduplication + Data sources are deduplicated by name (case-insensitive) and by structural match (same type and table). Existing data sources are reused and their IDs mapped to the provided refs. + + ## Execution Order + 1. Data sources (list_rows, get_row) — so elements can reference them. + 2. Elements (in order — parents before children): heading, text, button, link, image, column, form_container, simple_container, input_text, choice, checkbox, datetime_picker, record_selector, table, repeat. + 3. Actions (click, submit) — attached to elements via ref. + + ## Element Fields by Type + - heading: value (text), level (1-5) + - text: value (text), format ("plain"/"markdown") + - button/link: value (label) + - image: image_url, alt_text + - column: column_count + - form_container: submit_button_label + - input_text: label, placeholder, default_value, required, validation_type, is_multiline + - choice: label, choice_options, multiple + - checkbox: label, default_value + - table: data_source (ref), fields [{name, type ("text"/"button"), value}] + - repeat: data_source (ref), orientation + + ## Refs + - data_source refs: referenced by elements (data_source field) and actions (data_source field) + - element refs: referenced by child elements (parent_element field) and actions (element field) + - Use string refs for items created in this call, int IDs for pre-existing items. + + ## Dynamic Values + Use "$formula: " — describe the data you want using references or ids when possible. + Examples: "$formula: the Name field from the projects data source", "$formula: the Email form input". + + ## Shared Elements (header, footer) — CRITICAL + Headers and footers are shared across ALL pages. Any element placed inside + a header/footer (as a child) is also shared and appears on every page. + - ONLY put site-wide navigation in headers/footers: menus, logo, links to fixed pages. + - NEVER put page-specific content as children of headers/footers: page titles, + data-bound text, forms, "back" buttons, or content that varies per page. + - Page-specific content belongs directly on the page root, NOT inside shared containers. + - If a header already exists (page_name="[shared]" in list_elements), do NOT + add page-specific children to it. + """ + + user = ctx.deps.user + tool_helpers = ctx.deps.tool_helpers + + page = helpers.get_page(user, page_id) + shared_page = PageHandler().get_shared_page(page.builder) + integration = helpers.get_local_baserow_integration(user, page.builder) + + ds_ref_to_id: dict[str, int] = _get_data_source_refs(tool_helpers, page_id) + el_ref_to_id: dict[str, int] = _get_element_refs(tool_helpers, page_id) + shared_page_refs: set[str] = set( + _get_element_refs(tool_helpers, shared_page.id).keys() + ) + + result: dict[str, Any] = {} + all_errors: list[str] = [] + + # Phase 1: Data sources + created_ds, ds_errors = _setup_data_sources( + user, page, data_sources or [], ds_ref_to_id, integration, tool_helpers + ) + all_errors.extend(ds_errors) + _track_data_source_refs(tool_helpers, page_id, ds_ref_to_id) + if created_ds: + result["created_data_sources"] = created_ds + + # Phase 2: Elements + created_el, el_errors = _setup_elements( + user, + page, + elements or [], + el_ref_to_id, + ds_ref_to_id, + shared_page_refs, + tool_helpers, + ) + all_errors.extend(el_errors) + _track_element_refs(tool_helpers, page_id, el_ref_to_id) + _track_element_refs( + tool_helpers, + shared_page.id, + {r: 0 for r in el_ref_to_id if r in shared_page_refs}, + ) + if created_el: + result["created_elements"] = created_el + + # Phase 3: Actions + created_actions, action_errors = _setup_actions( + user, + page, + actions or [], + el_ref_to_id, + ds_ref_to_id, + integration, + tool_helpers, + ) + all_errors.extend(action_errors) + if created_actions: + result["created_actions"] = created_actions + + if all_errors: + result["errors"] = all_errors + + # Navigate to the page + tool_helpers.navigate_to( + BuilderPageNavigationType( + type="builder-page", + application_id=page.builder_id, + page_id=page_id, + page_name=page.name, + ) + ) + + return result + + +# --------------------------------------------------------------------------- +# Tool: setup_user_source +# --------------------------------------------------------------------------- + + +def setup_user_source( + ctx: RunContext[AssistantDeps], + application_id: Annotated[int, Field(description="The builder application ID.")], + setup: Annotated[UserSourceSetup, Field(description="User source configuration.")], + thought: Annotated[ + str, Field(description="Brief reasoning for calling this tool.") + ], +) -> dict[str, Any]: + """\ + Set up a user source so the application can have logged-in users with roles. + + WHEN to use: User wants login, authentication, role-based access, or user accounts in their app. + WHAT it does: Creates a users table (or uses an existing one) and configures a Local Baserow user source with password authentication. + RETURNS: User source ID, table ID, available roles. + DO NOT USE when: A user source already exists for this application. + HOW: If user mentions a specific table, use table_id. Otherwise use database_id to create a new users table. + """ + + user = ctx.deps.user + workspace = ctx.deps.workspace + tool_helpers = ctx.deps.tool_helpers + + try: + builder = helpers.get_builder(user, workspace, application_id) + except Exception as exc: + return {"error": f"Could not find application: {exc}"} + + tool_helpers.update_status(_("Setting up user source...")) + integration = helpers.get_local_baserow_integration(user, builder) + + try: + with transaction.atomic(): + if setup.table_id: + tool_helpers.update_status(_("Validating existing table...")) + table, field_map = helpers.resolve_existing_table( + user, workspace, setup.table_id + ) + else: + tool_helpers.update_status(_("Creating users table...")) + table, field_map = helpers.create_users_table( + user, setup.database_id, workspace, setup.get_roles() + ) + + tool_helpers.update_status(_("Creating user source...")) + user_source = helpers.create_user_source( + user, builder, setup.name, table, field_map, integration + ) + except Exception as exc: + return {"error": str(exc)} + + # Create login page if not already set + login_page_id = builder.login_page_id + if not login_page_id: + tool_helpers.update_status(_("Creating login page...")) + login_page = helpers.create_login_page(user, builder, user_source.id) + login_page_id = login_page.id + + from baserow.core.user_sources.handler import UserSourceHandler + + roles = UserSourceHandler().get_all_roles_for_application(builder) + + result: dict[str, Any] = { + "user_source_id": user_source.id, + "table_id": table.id, + "roles": roles, + "login_page_id": login_page_id, + } + if "hint" in field_map: + result["hint"] = field_map["hint"] + return result + + +# --------------------------------------------------------------------------- +# Exports +# --------------------------------------------------------------------------- + +TOOL_FUNCTIONS = [ + list_pages, + create_pages, + update_page, + list_data_sources, + create_data_sources, + update_data_source, + list_elements, + create_display_elements, + create_layout_elements, + create_form_elements, + create_collection_elements, + update_element, + update_element_style, + move_elements, + list_actions, + create_actions, + add_action_field_mapping, + setup_page, + setup_user_source, +] +builder_toolset = FunctionToolset(TOOL_FUNCTIONS, max_retries=3) + +ROUTING_RULES = """\ +- New page with content: call create_pages first, then setup_page for the NEW page. If elements don't fit the current page context, ask which page to target. +- switch_mode: switch domain if task needs tools not in the current mode. +- Use setup_page when creating all content for a page at once. Use individual tools (create_data_sources, create_*_elements, create_actions) when adding to or modifying a page that already has content. +- Button/form actions (click, submit) → create_actions. Do NOT switch to database mode to use load_row_tools for this — that is for direct database CRUD, not builder page behavior. +- switch_mode when the task needs tools from another domain. Examples: + - Filtering: switch_mode("database") → create_views + create_view_filters → switch_mode("application") → create_data_sources with view_id. + - New tables for an app: switch_mode("database") → create_tables → switch_mode("application") → create_pages → setup_page. +- User authentication: if the app needs login/roles, call setup_user_source before creating pages with visibility="logged-in". +- Completeness checks before finishing: + - Every page that displays data needs at least one data source. + - Table/repeat elements must specify their columns/fields. + - Forms need input elements + a submit action (create_row or update_row). + - Buttons and links need a click action (open_page, notification, etc.).""" diff --git a/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/types/__init__.py b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/types/__init__.py new file mode 100644 index 0000000000..90aa659a6b --- /dev/null +++ b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/types/__init__.py @@ -0,0 +1,73 @@ +from .data_source import ( + DataSourceCreate, + DataSourceItem, + DataSourceSort, + DataSourceUpdate, +) +from .element import ( + ButtonStyleOverride, + ChoiceOption, + CollectionElementCreate, + DisplayElementCreate, + ElementItem, + ElementItemCreate, + ElementMove, + ElementStyleUpdate, + ElementUpdate, + FormElementCreate, + ImageStyleOverride, + InputStyleOverride, + ItemsPerRow, + LayoutElementCreate, + LinkStyleOverride, + MenuItemCreate, + ParameterMapping, + TableFieldConfig, + TableStyleOverride, + TypographyStyleOverride, +) +from .page import PageCreate, PageItem, PagePathParam, PageQueryParam, PageUpdate +from .workflow_action import ( + ActionCreate, + ActionItem, + ActionType, + FieldMappingItem, + FieldValueMapping, +) + +__all__ = [ + "ActionCreate", + "ActionItem", + "ActionType", + "ButtonStyleOverride", + "ChoiceOption", + "CollectionElementCreate", + "DataSourceCreate", + "DataSourceItem", + "DataSourceSort", + "DataSourceUpdate", + "DisplayElementCreate", + "ElementItem", + "ElementItemCreate", + "ElementMove", + "ElementStyleUpdate", + "ElementUpdate", + "FieldMappingItem", + "FieldValueMapping", + "FormElementCreate", + "ImageStyleOverride", + "InputStyleOverride", + "ItemsPerRow", + "LayoutElementCreate", + "LinkStyleOverride", + "MenuItemCreate", + "PageCreate", + "PageItem", + "PagePathParam", + "PageQueryParam", + "PageUpdate", + "ParameterMapping", + "TableFieldConfig", + "TableStyleOverride", + "TypographyStyleOverride", +] diff --git a/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/types/data_source.py b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/types/data_source.py new file mode 100644 index 0000000000..ca97d2f538 --- /dev/null +++ b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/types/data_source.py @@ -0,0 +1,375 @@ +""" +Builder data source type models. + +Defines ``DataSourceCreate`` (flat) for creating data sources and +``DataSourceItem`` for reading them back. +""" + +from typing import TYPE_CHECKING, Any, Callable, Literal + +from pydantic import Field, PrivateAttr, model_serializer, model_validator + +from baserow.core.formula.types import ( + BASEROW_FORMULA_MODE_ADVANCED, + BaserowFormulaObject, +) +from baserow_enterprise.assistant.tools.shared.formula_utils import ( + formula_desc, + literal_or_placeholder, + needs_formula, +) +from baserow_enterprise.assistant.types import BaseModel + +if TYPE_CHECKING: + from django.contrib.auth.models import AbstractUser + + from baserow_enterprise.assistant.tools.builder.agents import BuilderFormulaContext + +# --------------------------------------------------------------------------- +# Data source sort +# --------------------------------------------------------------------------- + +DataSourceType = Literal["list_rows", "get_row"] + + +class DataSourceSort(BaseModel): + """Sort configuration for data source.""" + + field_id: int = Field(..., description="Field ID to sort by.") + direction: Literal["ASC", "DESC"] = Field(default="ASC") + + +# --------------------------------------------------------------------------- +# Required fields per type +# --------------------------------------------------------------------------- + +_REQUIRED_FIELDS: dict[str, tuple[str, ...]] = { + "list_rows": ("table_id",), + "get_row": ("table_id", "row_id"), +} + +# --------------------------------------------------------------------------- +# Service type mapping +# --------------------------------------------------------------------------- + +_SERVICE_TYPE: dict[str, str] = { + "list_rows": "local_baserow_list_rows", + "get_row": "local_baserow_get_row", +} + +# Structural match dispatch: type -> (new, existing) -> bool +# Used to detect duplicate data sources regardless of name. +_STRUCTURAL_MATCH: dict[str, Callable] = { + "list_rows": lambda new, ex: new.table_id == ex.table_id, + "get_row": lambda new, ex: False, # row_id varies, can't dedup +} + + +# --------------------------------------------------------------------------- +# DataSourceCreate (flat) +# --------------------------------------------------------------------------- + + +class DataSourceCreate(BaseModel): + """ + Flat model for creating a data source: list_rows or get_row. + + Type-specific fields are optional — a ``@model_validator`` enforces + the correct required fields per type. + """ + + ref: str = Field(..., description="Reference ID for this data source.") + name: str = Field(..., description="Human-readable name.") + type: DataSourceType = Field(..., description="'list_rows' or 'get_row'.") + table_id: int = Field(..., description="ID of the table to fetch from.") + + # get_row only + row_id: str | None = Field( + default=None, + description=("(get_row) Row ID. Supports $formula: prefix for dynamic values."), + ) + + # list_rows only + search_query: str | None = Field( + default=None, + description=( + "(list_rows) Search query. Supports $formula: prefix for dynamic values." + ), + ) + sortings: list[DataSourceSort] | None = Field( + default=None, + description="(list_rows) Sort configuration.", + ) + view_id: int | None = Field( + default=None, + description=( + "(list_rows) ID of a database table view whose filters and sortings " + "will be applied to this data source. Use create_views and " + "create_view_filters to set up the view first." + ), + ) + + @model_validator(mode="after") + def _check_required(self): + for field_name in _REQUIRED_FIELDS.get(self.type, ()): + if getattr(self, field_name) is None: + raise ValueError(f"'{field_name}' is required for type '{self.type}'.") + return self + + # -- ORM helpers -------------------------------------------------------- + + def get_service_type(self) -> str: + """Return the service type string for this data source.""" + return _SERVICE_TYPE[self.type] + + def matches_existing(self, existing: "DataSourceItem") -> bool: + """Check if this create request would produce a duplicate of *existing*. + + Delegates to a per-type matcher in ``_STRUCTURAL_MATCH``. + """ + + if self.type != existing.type: + return False + matcher = _STRUCTURAL_MATCH.get(self.type) + return matcher(self, existing) if matcher else False + + def to_service_kwargs(self, user: "AbstractUser", workspace: Any) -> dict: + """Build kwargs for ``DataSourceService.create_data_source()``.""" + + from baserow_enterprise.assistant.tools.builder.helpers import ToolInputError + from baserow_enterprise.assistant.tools.database.helpers import filter_tables + + table = filter_tables(user, workspace).filter(id=self.table_id).first() + if table is None: + raise ToolInputError(f"Table with id {self.table_id} not found.") + kwargs: dict[str, Any] = {"table": table} + + if self.type == "get_row" and self.row_id is not None: + kwargs["row_id"] = BaserowFormulaObject.create( + literal_or_placeholder(self.row_id), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + + if self.type == "list_rows" and self.search_query: + kwargs["search_query"] = BaserowFormulaObject.create( + literal_or_placeholder(self.search_query), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + + if self.view_id is not None: + from baserow_enterprise.assistant.tools.database.helpers import get_view + + kwargs["view"] = get_view(user, workspace, self.view_id) + + return kwargs + + def get_sortings(self) -> list[dict]: + """Return sortings in ORM format.""" + if not self.sortings: + return [] + return [ + {"field_id": s.field_id, "order_by": s.direction} for s in self.sortings + ] + + # -- Formula helpers ---------------------------------------------------- + + def get_formulas_to_create( + self, + orm_data_source: Any, + context: "BuilderFormulaContext", + ) -> dict[str, str]: + """Return ``{field_path: description}`` for LLM formula generation.""" + + formulas: dict[str, str] = {} + + if self.type == "get_row" and self.row_id and needs_formula(self.row_id): + formulas["row_id"] = formula_desc(self.row_id) + + if ( + self.type == "list_rows" + and self.search_query + and needs_formula(self.search_query) + ): + formulas["search_query"] = formula_desc(self.search_query) + + return formulas + + def update_with_formulas( + self, + user: "AbstractUser", + orm_data_source: Any, + formulas: dict[str, str], + ) -> None: + """Apply LLM-generated formulas to this data source.""" + + if not formulas: + return + + from baserow.contrib.builder.data_sources.handler import DataSourceHandler + from baserow.contrib.builder.data_sources.service import DataSourceService + from baserow.core.services.registries import service_type_registry + + service_kwargs: dict[str, Any] = {} + + if "row_id" in formulas: + service_kwargs["row_id"] = BaserowFormulaObject.create( + formulas["row_id"], mode=BASEROW_FORMULA_MODE_ADVANCED + ) + + if "search_query" in formulas: + service_kwargs["search_query"] = BaserowFormulaObject.create( + formulas["search_query"], mode=BASEROW_FORMULA_MODE_ADVANCED + ) + + if service_kwargs: + ds_for_update = DataSourceHandler().get_data_source_for_update( + orm_data_source.id + ) + service_type = service_type_registry.get_by_model( + ds_for_update.service.specific + ) + DataSourceService().update_data_source( + user, ds_for_update, service_type=service_type, **service_kwargs + ) + + +# --------------------------------------------------------------------------- +# DataSourceUpdate +# --------------------------------------------------------------------------- + + +class DataSourceUpdate(BaseModel): + """ + Update an existing data source's properties. + + All fields are optional. Only non-None fields are sent to the service layer. + """ + + data_source_id: int = Field(..., description="ID of the data source to update.") + name: str | None = Field(default=None, description="New name.") + table_id: int | None = Field( + default=None, description="New table ID to fetch from." + ) + row_id: str | None = Field( + default=None, + description="(get_row) Row ID. Supports $formula: prefix.", + ) + search_query: str | None = Field( + default=None, + description="(list_rows) Search query. Supports $formula: prefix.", + ) + view_id: int | None = Field( + default=None, + description=( + "ID of a database table view whose filters and sortings will be applied." + ), + ) + + def to_update_kwargs(self, user: "AbstractUser", workspace: Any) -> dict: + """Return kwargs for ``DataSourceService.update_data_source()``.""" + + kwargs: dict[str, Any] = {} + + if self.name is not None: + kwargs["name"] = self.name + + if self.table_id is not None: + from baserow_enterprise.assistant.tools.builder.helpers import ( + ToolInputError, + ) + from baserow_enterprise.assistant.tools.database.helpers import ( + filter_tables, + ) + + table = filter_tables(user, workspace).filter(id=self.table_id).first() + if table is None: + raise ToolInputError(f"Table with id {self.table_id} not found.") + kwargs["table"] = table + + if self.row_id is not None: + kwargs["row_id"] = BaserowFormulaObject.create( + literal_or_placeholder(self.row_id), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + + if self.search_query is not None: + kwargs["search_query"] = BaserowFormulaObject.create( + literal_or_placeholder(self.search_query), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + + if self.view_id is not None: + from baserow_enterprise.assistant.tools.database.helpers import get_view + + kwargs["view"] = get_view(user, workspace, self.view_id) + + return kwargs + + def get_formulas_to_update( + self, + orm_data_source: Any, + context: "BuilderFormulaContext", + ) -> dict[str, str]: + """Return ``{field_path: description}`` for LLM formula generation.""" + + formulas: dict[str, str] = {} + if self.row_id and needs_formula(self.row_id): + formulas["row_id"] = formula_desc(self.row_id) + if self.search_query and needs_formula(self.search_query): + formulas["search_query"] = formula_desc(self.search_query) + return formulas + + def get_updated_field_names(self) -> list[str]: + """Return names of fields that were explicitly set (non-None).""" + + skip = {"data_source_id"} + return [ + name + for name in self.__class__.model_fields + if name not in skip and getattr(self, name) is not None + ] + + +# --------------------------------------------------------------------------- +# DataSourceItem (for listing) +# --------------------------------------------------------------------------- + + +class DataSourceItem(BaseModel): + """Existing data source with ID.""" + + id: int + name: str + type: str + table_id: int | None = None + + _table_name: str | None = PrivateAttr(default=None) + + @model_serializer(mode="wrap") + def _serialize(self, handler): + data = handler(self) + if self._table_name is not None: + data["table_name"] = self._table_name + return data + + @classmethod + def from_orm(cls, data_source) -> "DataSourceItem": + """Create DataSourceItem from ORM DataSource instance.""" + + table_id = None + table_name = None + if data_source.service: + service = data_source.service.specific + if hasattr(service, "table_id"): + table_id = service.table_id + if hasattr(service, "table") and service.table: + table_name = service.table.name + + item = cls( + id=data_source.id, + name=data_source.name, + type=data_source.service.get_type().type if data_source.service else "", + table_id=table_id, + ) + item._table_name = table_name + return item diff --git a/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/types/element.py b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/types/element.py new file mode 100644 index 0000000000..afaf9671b5 --- /dev/null +++ b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/types/element.py @@ -0,0 +1,2269 @@ +""" +Builder element type models. + +Defines ``ElementItemCreate`` (flat) for creating UI elements and +``ElementItem`` for reading them back. Uses dispatch tables for +per-type ORM conversion and formula handling. + +## Dispatch Tables (add entries when adding a new element type) + +When adding support for a new element type, update these tables: + +- ``_TO_ORM``: Convert ``ElementItemCreate`` → ORM kwargs for creation. +- ``_POST_CREATE``: Hook called after ORM creation (e.g. for child objects). +- ``_GET_FORMULAS``: Return ``{field: description}`` for LLM formula generation. +- ``_UPDATE_FORMULAS``: Apply generated formulas to the ORM element. +- ``_TO_ORM_UPDATE``: Convert ``ElementUpdate`` → ORM kwargs for updates. +- ``_GET_UPDATE_FORMULAS``: Return formulas needed for element updates. + +Not all tables need entries — only add to those relevant for the new type. +""" + +import uuid +from typing import TYPE_CHECKING, Any, Literal + +from pydantic import Field, model_validator + +from baserow.core.formula.types import ( + BASEROW_FORMULA_MODE_ADVANCED, + BaserowFormulaObject, +) +from baserow_enterprise.assistant.tools.shared.formula_utils import ( + formula_desc, + literal_or_placeholder, + needs_formula, + wrap_static_string, +) +from baserow_enterprise.assistant.types import BaseModel + +if TYPE_CHECKING: + from django.contrib.auth.models import AbstractUser + + from baserow.contrib.builder.elements.models import Element + from baserow.contrib.builder.pages.models import Page + from baserow_enterprise.assistant.tools.builder.agents import BuilderFormulaContext + +# --------------------------------------------------------------------------- +# Element type literal (excluding iframe) +# --------------------------------------------------------------------------- + +ElementType = Literal[ + "heading", + "text", + "button", + "link", + "image", + "column", + "form_container", + "simple_container", + "input_text", + "choice", + "checkbox", + "datetime_picker", + "record_selector", + "table", + "repeat", + "header", + "footer", + "menu", + "auth_form", +] + +CONTAINER_ELEMENT_TYPES = { + "column", + "form_container", + "simple_container", + "repeat", + "header", + "footer", +} + +# Elements that live on the shared page (visible across all pages). +_SHARED_PAGE_TYPES = {"header", "footer"} + + +# --------------------------------------------------------------------------- +# Sub-models +# --------------------------------------------------------------------------- + + +class ParameterMapping(BaseModel): + """Key-value parameter mapping for page/query parameters on links.""" + + name: str = Field(..., description="Parameter name.") + value: str = Field(..., description="Parameter value formula.") + + +class ChoiceOption(BaseModel): + """Option for choice element.""" + + name: str + value: str + + +class ItemsPerRow(BaseModel): + """Responsive items-per-row for repeat elements.""" + + desktop: int = Field(default=3) + tablet: int = Field(default=2) + smartphone: int = Field(default=1) + + +class MenuItemCreate(BaseModel): + """A menu item linking to an internal page.""" + + name: str = Field(..., description="Display text.") + page_id: int = Field(..., description="Target page ID.") + + +class TableFieldConfig(BaseModel): + """ + Column configuration for table elements. + + ``type`` is ``"text"`` (default) or ``"button"``. + """ + + name: str = Field(..., description="Column header name.") + type: Literal["text", "button", "link", "tags"] = Field( + default="text", description="Column type." + ) + + # text columns + value: str | None = Field( + default=None, + description="(text) Cell value formula. Supports $formula: prefix.", + ) + + # button columns + label: str | None = Field(default=None, description="(button) Button label.") + + +# --------------------------------------------------------------------------- +# ORM dispatch: element_type -> kwargs builder +# --------------------------------------------------------------------------- + + +def _heading_orm(el: "ElementItemCreate", user, page) -> dict: + return { + "value": BaserowFormulaObject.create( + literal_or_placeholder(el.value) + if needs_formula(el.value) + else wrap_static_string(el.value or ""), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ), + "level": el.level or 1, + } + + +def _text_orm(el: "ElementItemCreate", user, page) -> dict: + return { + "value": BaserowFormulaObject.create( + literal_or_placeholder(el.value) + if needs_formula(el.value) + else wrap_static_string(el.value or ""), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ), + "format": el.format or "plain", + } + + +def _button_orm(el: "ElementItemCreate", user, page) -> dict: + text = el.value or el.label or "" + return { + "value": BaserowFormulaObject.create( + literal_or_placeholder(text) + if needs_formula(text) + else wrap_static_string(text), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ), + } + + +def _link_orm(el: "ElementItemCreate", user, page) -> dict: + kwargs: dict[str, Any] = { + "value": BaserowFormulaObject.create( + literal_or_placeholder(el.value) + if needs_formula(el.value) + else wrap_static_string(el.value or ""), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ), + "variant": el.link_variant or "link", + "navigation_type": el.navigation_type or "page", + "target": el.link_target or "self", + } + + nav = el.navigation_type or "page" + if nav == "page" and el.navigate_to_page_id: + kwargs["navigate_to_page_id"] = el.navigate_to_page_id + kwargs["page_parameters"] = [ + { + "name": p.name, + "value": BaserowFormulaObject.create( + p.value, mode=BASEROW_FORMULA_MODE_ADVANCED + ), + } + for p in (el.link_page_parameters or []) + ] + elif nav == "custom" and el.navigate_to_url: + kwargs["navigate_to_url"] = BaserowFormulaObject.create( + literal_or_placeholder(el.navigate_to_url) + if needs_formula(el.navigate_to_url) + else wrap_static_string(el.navigate_to_url), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + + return kwargs + + +def _image_orm(el: "ElementItemCreate", user, page) -> dict: + image_url = el.image_url or "" + alt_text = el.alt_text or "" + return { + "image_source_type": el.image_source_type or "url", + "image_url": BaserowFormulaObject.create( + literal_or_placeholder(image_url) + if needs_formula(image_url) + else wrap_static_string(image_url) + if image_url + else "''", + mode=BASEROW_FORMULA_MODE_ADVANCED, + ), + "alt_text": BaserowFormulaObject.create( + literal_or_placeholder(alt_text) + if needs_formula(alt_text) + else wrap_static_string(alt_text) + if alt_text + else "''", + mode=BASEROW_FORMULA_MODE_ADVANCED, + ), + } + + +def _column_orm(el: "ElementItemCreate", user, page) -> dict: + return { + "column_amount": el.column_amount or 2, + "column_gap": el.column_gap or 20, + "alignment": el.column_alignment or "top", + } + + +def _form_container_orm(el: "ElementItemCreate", user, page) -> dict: + return { + "submit_button_label": BaserowFormulaObject.create( + f"'{el.submit_button_label or 'Submit'}'", + mode=BASEROW_FORMULA_MODE_ADVANCED, + ), + "reset_initial_values_post_submission": el.reset_initial_values_post_submission + or False, + } + + +def _input_text_orm(el: "ElementItemCreate", user, page) -> dict: + default_value = el.default_value or "" + return { + "label": BaserowFormulaObject.create( + f"'{el.label or ''}'", mode=BASEROW_FORMULA_MODE_ADVANCED + ), + "placeholder": BaserowFormulaObject.create( + f"'{el.placeholder or ''}'", mode=BASEROW_FORMULA_MODE_ADVANCED + ), + "default_value": BaserowFormulaObject.create( + literal_or_placeholder(default_value) + if needs_formula(default_value) + else (wrap_static_string(default_value) if default_value else "''"), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ), + "required": el.required or False, + "validation_type": el.validation_type or "any", + "is_multiline": el.is_multiline or False, + "rows": el.rows or 3, + } + + +def _choice_orm(el: "ElementItemCreate", user, page) -> dict: + default_value = el.default_value or "" + return { + "label": BaserowFormulaObject.create( + f"'{el.label or ''}'", mode=BASEROW_FORMULA_MODE_ADVANCED + ), + "placeholder": BaserowFormulaObject.create( + f"'{el.placeholder or ''}'", mode=BASEROW_FORMULA_MODE_ADVANCED + ), + "default_value": BaserowFormulaObject.create( + literal_or_placeholder(default_value) + if needs_formula(default_value) + else (wrap_static_string(default_value) if default_value else "''"), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ), + "required": el.required or False, + "multiple": el.multiple or False, + "show_as_dropdown": el.show_as_dropdown + if el.show_as_dropdown is not None + else True, + } + + +def _checkbox_orm(el: "ElementItemCreate", user, page) -> dict: + default_value = el.default_value or "false" + return { + "label": BaserowFormulaObject.create( + f"'{el.label or ''}'", mode=BASEROW_FORMULA_MODE_ADVANCED + ), + "default_value": BaserowFormulaObject.create( + literal_or_placeholder(default_value) + if needs_formula(default_value) + else default_value, + mode=BASEROW_FORMULA_MODE_ADVANCED, + ), + "required": el.required or False, + } + + +def _datetime_picker_orm(el: "ElementItemCreate", user, page) -> dict: + return { + "label": BaserowFormulaObject.create( + f"'{el.label or ''}'", mode=BASEROW_FORMULA_MODE_ADVANCED + ), + "required": el.required or False, + "include_time": el.include_time or False, + "date_format": el.date_format or "EU", + } + + +def _record_selector_orm(el: "ElementItemCreate", user, page) -> dict: + return { + "label": BaserowFormulaObject.create( + f"'{el.label or ''}'", mode=BASEROW_FORMULA_MODE_ADVANCED + ), + "data_source_id": el.data_source, + "required": el.required or False, + "multiple": el.multiple or False, + "placeholder": BaserowFormulaObject.create( + f"'{el.placeholder or ''}'", mode=BASEROW_FORMULA_MODE_ADVANCED + ), + } + + +def _table_orm(el: "ElementItemCreate", user, page) -> dict: + kwargs: dict[str, Any] = { + "data_source_id": el.data_source, + "items_per_page": el.items_per_page or 20, + "button_load_more_label": BaserowFormulaObject.create( + f"'{el.button_load_more_label or 'Load more'}'", + mode=BASEROW_FORMULA_MODE_ADVANCED, + ), + } + + if el.fields: + kwargs["fields"] = _convert_table_fields(el) + elif el.data_source: + # Auto-generate default fields from data source + from baserow.contrib.builder.data_sources.service import DataSourceService + + data_source = next( + iter( + DataSourceService() + .get_data_sources(user, page, with_shared=True) + .filter(id=el.data_source) + ), + None, + ) + if data_source and hasattr(data_source.service, "table_id"): + service = data_source.service + kwargs["fields"] = service.get_type().get_default_collection_fields(service) + + return kwargs + + +def _repeat_orm(el: "ElementItemCreate", user, page) -> dict: + items_per_row = ( + el.repeat_items_per_row.model_dump() + if el.repeat_items_per_row + else ItemsPerRow().model_dump() + ) + return { + "data_source_id": el.data_source, + "orientation": el.orientation or "vertical", + "items_per_page": el.items_per_page or 20, + "items_per_row": items_per_row, + } + + +def _header_orm(el: "ElementItemCreate", user, page) -> dict: + return {"share_type": el.share_type or "all"} + + +def _footer_orm(el: "ElementItemCreate", user, page) -> dict: + return {"share_type": el.share_type or "all"} + + +def _menu_orm(el: "ElementItemCreate", user, page) -> dict: + kwargs: dict[str, Any] = { + "orientation": el.menu_orientation or "horizontal", + "alignment": el.menu_alignment or "left", + } + if el.menu_items: + kwargs["menu_items"] = [ + { + "uid": str(uuid.uuid4()), + "type": "link", + "variant": "link", + "name": item.name, + "navigation_type": "page", + "navigate_to_page_id": item.page_id, + "target": "self", + } + for item in el.menu_items + ] + return kwargs + + +_TO_ORM: dict[str, Any] = { + "heading": _heading_orm, + "text": _text_orm, + "button": _button_orm, + "link": _link_orm, + "image": _image_orm, + "column": _column_orm, + "form_container": _form_container_orm, + "simple_container": lambda el, u, p: {}, + "input_text": _input_text_orm, + "choice": _choice_orm, + "checkbox": _checkbox_orm, + "datetime_picker": _datetime_picker_orm, + "record_selector": _record_selector_orm, + "table": _table_orm, + "repeat": _repeat_orm, + "header": _header_orm, + "footer": _footer_orm, + "menu": _menu_orm, + "auth_form": lambda el, u, p: { + k: v + for k, v in { + "user_source_id": el.user_source_id, + "login_button_label": el.login_button_label or "", + }.items() + if v is not None + }, +} + + +# --------------------------------------------------------------------------- +# Post-create dispatch +# --------------------------------------------------------------------------- + + +def _choice_post_create(el: "ElementItemCreate", user, orm_element, page) -> None: + """Create choice options after the element is created.""" + if el.choice_options: + from baserow.contrib.builder.elements.models import ChoiceElementOption + + ChoiceElementOption.objects.bulk_create( + [ + ChoiceElementOption(choice=orm_element, name=o.name, value=o.value) + for o in el.choice_options + ] + ) + + +def _header_footer_post_create( + el: "ElementItemCreate", user, orm_element, page +) -> None: + """Set page associations and auto-create a child menu for header/footer elements.""" + + if el.page_ids: + orm_element.pages.set(el.page_ids) + + # If menu_items were provided on the header/footer itself, create a child + # menu element — headers are containers, not menus. + if el.menu_items: + from baserow.contrib.builder.elements.registries import element_type_registry + from baserow.contrib.builder.elements.service import ElementService + + menu_items_orm = [ + { + "uid": str(uuid.uuid4()), + "type": "link", + "variant": "link", + "name": item.name, + "navigation_type": "page", + "navigate_to_page_id": item.page_id, + "target": "self", + } + for item in el.menu_items + ] + menu_type = element_type_registry.get("menu") + ElementService().create_element( + user, + menu_type, + page, + parent_element_id=orm_element.id, + menu_items=menu_items_orm, + ) + + +def _table_post_create(el: "ElementItemCreate", user, orm_element, page) -> list: + """Create button-column workflow actions and enable filter/sort/search. + + Returns a list of ``(orm_action, action_create)`` pairs for any + button-column actions that were created (empty list if none). + """ + + if not el.fields: + return [] + + from baserow.contrib.builder.elements.models import CollectionElementPropertyOptions + from baserow_enterprise.assistant.tools.builder.helpers import ( + create_table_button_actions, + get_local_baserow_integration, + ) + + integration = get_local_baserow_integration(user, page.builder) + action_pairs = create_table_button_actions(user, page, orm_element, el, integration) + + # Auto-enable filter/sort/search for text columns referencing real fields. + table_fields = _resolve_table_fields(el.data_source) + property_options = [] + for field_cfg in el.fields: + if field_cfg.type != "text": + continue + match = table_fields.get(field_cfg.name.lower()) + if match: + field_id, _ = match + property_options.append( + CollectionElementPropertyOptions( + element=orm_element, + schema_property=f"field_{field_id}", + filterable=True, + sortable=True, + searchable=True, + ) + ) + if property_options: + CollectionElementPropertyOptions.objects.bulk_create( + property_options, ignore_conflicts=True + ) + + return action_pairs + + +_POST_CREATE: dict[str, Any] = { + "choice": _choice_post_create, + "header": _header_footer_post_create, + "footer": _header_footer_post_create, + "table": _table_post_create, +} + + +# --------------------------------------------------------------------------- +# Formula dispatch: get_formulas_to_create +# --------------------------------------------------------------------------- + + +def _value_formula(el: "ElementItemCreate", orm_element, context) -> dict[str, str]: + """Get formulas for elements with a ``value`` field.""" + if el.value and needs_formula(el.value): + return {"value": formula_desc(el.value)} + return {} + + +def _link_formulas(el: "ElementItemCreate", orm_element, context) -> dict[str, str]: + """Get formulas for link elements.""" + formulas: dict[str, str] = {} + if el.value and needs_formula(el.value): + formulas["value"] = formula_desc(el.value) + if el.navigate_to_url and needs_formula(el.navigate_to_url): + formulas["navigate_to_url"] = formula_desc(el.navigate_to_url) + return formulas + + +def _image_formulas(el: "ElementItemCreate", orm_element, context) -> dict[str, str]: + """Get formulas for image elements.""" + formulas: dict[str, str] = {} + if el.image_url and needs_formula(el.image_url): + formulas["image_url"] = formula_desc(el.image_url) + if el.alt_text and needs_formula(el.alt_text): + formulas["alt_text"] = formula_desc(el.alt_text) + return formulas + + +def _default_value_formula( + el: "ElementItemCreate", orm_element, context +) -> dict[str, str]: + """Get formulas for form elements with a ``default_value`` field.""" + if el.default_value and needs_formula(el.default_value): + return {"default_value": formula_desc(el.default_value)} + return {} + + +def _table_formulas(el: "ElementItemCreate", orm_element, context) -> dict[str, str]: + """Get formulas for table collection fields.""" + if not el.fields: + return {} + + formulas: dict[str, str] = {} + collection_fields = list(orm_element.fields.order_by("order")) + + for i, field_cfg in enumerate(el.fields): + existing_config = ( + collection_fields[i].config if i < len(collection_fields) else None + ) + + if field_cfg.type == "text": + value = field_cfg.value or "" + existing = "" + if existing_config: + existing = existing_config.get("value", {}).get("formula", "") + + if value and needs_formula(value): + if not existing or existing == "''": + formulas[f"fields.{i}.value"] = formula_desc(value) + elif not value and el.data_source: + if not existing or existing == "''": + formulas[f"fields.{i}.value"] = ( + f"the {field_cfg.name} value from the current record" + ) + + elif field_cfg.type == "button" and field_cfg.label: + if needs_formula(field_cfg.label): + formulas[f"fields.{i}.label"] = formula_desc(field_cfg.label) + + return formulas + + +_GET_FORMULAS: dict[str, Any] = { + "heading": _value_formula, + "text": _value_formula, + "button": _value_formula, + "link": _link_formulas, + "image": _image_formulas, + "input_text": _default_value_formula, + "choice": _default_value_formula, + "checkbox": _default_value_formula, + "datetime_picker": _default_value_formula, + "table": _table_formulas, +} + + +# --------------------------------------------------------------------------- +# Formula dispatch: update_element_with_formulas +# --------------------------------------------------------------------------- + + +def _update_simple_formulas( + el: "ElementItemCreate", + user: "AbstractUser", + orm_element: "Element", + formulas: dict[str, str], +) -> None: + """Default formula updater — sets fields directly on the element.""" + from baserow.contrib.builder.elements.service import ElementService + + kwargs = {} + for field_name, formula in formulas.items(): + if "." in field_name: + continue + if hasattr(orm_element, field_name): + kwargs[field_name] = BaserowFormulaObject.create( + formula, mode=BASEROW_FORMULA_MODE_ADVANCED + ) + + if kwargs: + ElementService().update_element(user, orm_element, **kwargs) + + +def _update_table_formulas( + el: "ElementItemCreate", + user: "AbstractUser", + orm_element: "Element", + formulas: dict[str, str], +) -> None: + """Update collection field configs for table elements.""" + if not formulas: + return + + collection_fields = list(orm_element.fields.order_by("order")) + for key, formula in formulas.items(): + parts = key.split(".") + if len(parts) != 3 or parts[0] != "fields": + continue + index = int(parts[1]) + config_key = parts[2] + if 0 <= index < len(collection_fields): + cf = collection_fields[index] + cf.config[config_key] = BaserowFormulaObject.create( + formula, mode=BASEROW_FORMULA_MODE_ADVANCED + ) + cf.save(update_fields=["config"]) + + +_UPDATE_FORMULAS: dict[str, Any] = { + "table": _update_table_formulas, +} + + +# --------------------------------------------------------------------------- +# Table field helpers +# --------------------------------------------------------------------------- + +# Formula path suffixes by field type — mirrors the mapping in +# LocalBaserowListRowsUserServiceType.get_default_collection_fields(). +_FORMULA_PATH_SUFFIX: dict[str, str] = { + "last_modified_by": ".name", + "created_by": ".name", + "single_select": ".value", + "multiple_collaborators": ".*.name", +} +_ARRAY_FIELD_TYPES = {"multiple_select", "link_row"} + + +def _resolve_table_fields(data_source_id: int | None) -> dict[str, tuple[int, str]]: + """ + Look up the data source's table and return a case-insensitive mapping + of field name -> (field_id, field_type_str). + """ + + if not data_source_id: + return {} + try: + from baserow.contrib.builder.data_sources.models import DataSource + + ds = DataSource.objects.select_related("service").get(id=data_source_id) + table = ds.service.specific.table + if table is None: + return {} + return { + f.name.lower(): (f.id, f.get_type().type) + for f in table.field_set.select_related("content_type").all() + } + except Exception: + return {} + + +def _field_formula(field_id: int, field_type: str) -> str: + """Build ``get('current_record.field_')`` formula.""" + + suffix = _FORMULA_PATH_SUFFIX.get(field_type, "") + if not suffix and field_type in _ARRAY_FIELD_TYPES: + suffix = ".*.value" + return f"get('current_record.field_{field_id}{suffix}')" + + +def _convert_table_fields( + el: "ElementItemCreate | None" = None, + *, + data_source_id: int | None = None, + fields: list | None = None, +) -> list[dict]: + """Convert TableFieldConfig list to ORM collection field format. + + Can be called with an ``ElementItemCreate`` (creation path) or with + explicit ``data_source_id`` + ``fields`` (update path). + """ + + if el is not None: + data_source_id = el.data_source # type: ignore[assignment] + fields = el.fields + + table_fields = _resolve_table_fields(data_source_id) + result = [] + for field_cfg in fields or []: + if field_cfg.type == "text": + value = field_cfg.value or "" + if value and not needs_formula(value): + value_formula = wrap_static_string(value) + else: + match = table_fields.get(field_cfg.name.lower()) + value_formula = _field_formula(*match) if match else "''" + result.append( + { + "name": field_cfg.name, + "type": "text", + "config": { + "value": BaserowFormulaObject.create( + value_formula, mode=BASEROW_FORMULA_MODE_ADVANCED + ) + }, + } + ) + elif field_cfg.type == "button": + label = field_cfg.label or field_cfg.name + if needs_formula(label): + label_formula = "''" + else: + label_formula = wrap_static_string(label) + result.append( + { + "name": field_cfg.name, + "type": "button", + "config": { + "label": BaserowFormulaObject.create( + label_formula, mode=BASEROW_FORMULA_MODE_ADVANCED + ) + }, + } + ) + elif field_cfg.type == "link": + result.append({"name": field_cfg.name, "type": "link", "config": {}}) + elif field_cfg.type == "tags": + result.append({"name": field_cfg.name, "type": "tags", "config": {}}) + + return result + + +# --------------------------------------------------------------------------- +# ElementItemCreate (flat) +# --------------------------------------------------------------------------- + + +class ElementItemCreate(BaseModel): + """ + Flat model for creating any builder UI element. + + Type-specific fields are optional. Dispatch tables route ORM conversion, + post-creation hooks, and formula handling based on the ``type`` field. + """ + + ref: str = Field(..., description="Unique reference for this element.") + type: ElementType = Field(..., description="Element type.") + + # -- Common fields ------------------------------------------------------ + + parent_element: int | str | None = Field( + default=None, + description="Parent container: int ID (existing) or string ref (same batch).", + ) + place_in_container: str | None = Field( + default=None, description="Position in parent container (e.g. '0', '1')." + ) + visibility: Literal["all", "logged-in", "not-logged"] = Field(default="all") + role_type: Literal["allow_all", "allow_all_except", "disallow_all_except"] = Field( + default="allow_all", + description="Role access strategy. Only relevant when visibility='logged-in'.", + ) + roles: list[str] = Field( + default_factory=list, + description="Role names for the access strategy.", + ) + + data_source: int | str | None = Field( + default=None, + description="Data source: int ID (existing) or string ref (same batch).", + ) + + # -- Display fields (heading, text, button, link) ----------------------- + + value: str | None = Field( + default=None, + description="Display text (heading, text, button label, link text). Supports $formula: prefix.", + ) + level: int | None = Field(default=None, description="(heading) Level 1-5.") + format: str | None = Field( + default=None, description="(text) 'plain' or 'markdown'." + ) + + # -- Link fields -------------------------------------------------------- + + link_variant: Literal["link", "button"] | None = Field( + default=None, description="(link) Display variant." + ) + navigation_type: Literal["page", "custom"] | None = Field( + default=None, description="(link) Navigation type." + ) + navigate_to_page_id: int | None = Field( + default=None, description="(link, open_page) Target page ID." + ) + navigate_to_url: str | None = Field( + default=None, + description="(link) Custom URL. Supports $formula: prefix.", + ) + link_page_parameters: list[ParameterMapping] | None = Field( + default=None, description="(link) Page parameter mappings." + ) + link_target: Literal["self", "blank"] | None = Field( + default=None, description="(link) Navigation target." + ) + + # -- Image fields ------------------------------------------------------- + + image_source_type: Literal["upload", "url"] | None = Field( + default=None, description="(image) Source type." + ) + image_url: str | None = Field( + default=None, + description="(image) Image URL. Supports $formula: prefix.", + ) + alt_text: str | None = Field( + default=None, + description="(image) Alt text. Supports $formula: prefix.", + ) + + # -- Column fields ------------------------------------------------------ + + column_amount: int | None = Field( + default=None, description="(column) Number of columns (1-6)." + ) + column_gap: int | None = Field( + default=None, description="(column) Gap between columns in px." + ) + column_alignment: Literal["top", "center", "bottom"] | None = Field( + default=None, description="(column) Vertical alignment." + ) + + # -- Form container fields ---------------------------------------------- + + submit_button_label: str | None = Field( + default=None, description="(form_container) Submit button label." + ) + reset_initial_values_post_submission: bool | None = Field( + default=None, description="(form_container) Reset form after submit." + ) + + # -- Form input fields -------------------------------------------------- + + label: str | None = Field( + default=None, + description="(form inputs) Field label.", + ) + placeholder: str | None = Field( + default=None, description="(form inputs) Placeholder text." + ) + default_value: str | None = Field( + default=None, + description="(form inputs) Default value. Supports $formula: prefix.", + ) + required: bool | None = Field( + default=None, description="(form inputs) Required field." + ) + + # input_text specific + validation_type: Literal["any", "email", "integer"] | None = Field( + default=None, description="(input_text) Validation type." + ) + is_multiline: bool | None = Field( + default=None, description="(input_text) Multiline mode." + ) + rows: int | None = Field( + default=None, description="(input_text) Rows for multiline." + ) + + # choice specific + multiple: bool | None = Field( + default=None, description="(choice, record_selector) Allow multiple." + ) + show_as_dropdown: bool | None = Field( + default=None, description="(choice) Show as dropdown." + ) + choice_options: list[ChoiceOption] | None = Field( + default=None, description="(choice) List of options." + ) + + # datetime_picker specific + include_time: bool | None = Field( + default=None, description="(datetime_picker) Include time." + ) + date_format: Literal["EU", "US", "ISO"] | None = Field( + default=None, description="(datetime_picker) Date format." + ) + + # -- Collection fields (table, repeat) ---------------------------------- + + items_per_page: int | None = Field( + default=None, description="(table, repeat) Items per page." + ) + button_load_more_label: str | None = Field( + default=None, description="(table) Load more button label." + ) + fields: list[TableFieldConfig] | None = Field( + default=None, description="(table) Column configurations." + ) + orientation: Literal["vertical", "horizontal"] | None = Field( + default=None, description="(repeat, menu) Orientation." + ) + repeat_items_per_row: ItemsPerRow | None = Field( + default=None, description="(repeat) Items per row config." + ) + + # -- Navigation fields (header, footer, menu) --------------------------- + + share_type: Literal["all", "only", "except"] | None = Field( + default=None, description="(header, footer) Page sharing." + ) + page_ids: list[int] | None = Field( + default=None, description="(header, footer) Page IDs for sharing." + ) + menu_orientation: Literal["horizontal", "vertical"] | None = Field( + default=None, description="(menu) Menu orientation." + ) + menu_alignment: Literal["left", "center", "right", "justify"] | None = Field( + default=None, description="(menu) Menu alignment." + ) + menu_items: list[MenuItemCreate] | None = Field( + default=None, description="(menu) Menu item configurations." + ) + + # -- Auth form fields --------------------------------------------------- + + user_source_id: int | None = Field( + default=None, + description="(auth_form) ID of the user source. Get it from setup_user_source.", + ) + login_button_label: str | None = Field( + default=None, description="(auth_form) Label for the login button." + ) + + # -- Properties --------------------------------------------------------- + + @property + def use_shared_page(self) -> bool: + """Whether this element should be created on the builder's shared page.""" + return self.type in _SHARED_PAGE_TYPES + + # -- ORM dispatch ------------------------------------------------------- + + def to_orm_kwargs(self, user: "AbstractUser", page: "Page") -> dict: + """Return kwargs for ``ElementService.create_element()``.""" + fn = _TO_ORM.get(self.type) + kwargs = fn(self, user, page) if fn else {} + + if self.visibility != "all": + kwargs["visibility"] = self.visibility + if self.role_type != "allow_all": + kwargs["role_type"] = self.role_type + if self.roles: + kwargs["roles"] = self.roles + + return kwargs + + def post_create( + self, + user: "AbstractUser", + orm_element: "Element", + page: "Page", + ) -> list: + """Hook called after ORM element creation. + + Returns a list of ``(orm_action, action_create)`` pairs for any + workflow actions created as part of the element setup (e.g. button + columns in table elements). Empty list if none. + """ + + fn = _POST_CREATE.get(self.type) + if fn: + return fn(self, user, orm_element, page) or [] + return [] + + def get_formulas_to_create( + self, + orm_element: "Element", + context: "BuilderFormulaContext", + ) -> dict[str, str]: + """Return ``{field_path: description}`` for LLM formula generation.""" + fn = _GET_FORMULAS.get(self.type) + return fn(self, orm_element, context) if fn else {} + + def update_with_formulas( + self, + user: "AbstractUser", + orm_element: "Element", + formulas: dict[str, str], + ) -> None: + """Apply LLM-generated formulas to this element.""" + fn = _UPDATE_FORMULAS.get(self.type) + if fn: + fn(self, user, orm_element, formulas) + else: + _update_simple_formulas(self, user, orm_element, formulas) + + +# --------------------------------------------------------------------------- +# ElementItem (for listing) +# --------------------------------------------------------------------------- + + +# --------------------------------------------------------------------------- +# Category-specific create models +# --------------------------------------------------------------------------- + + +class _ElementBase(BaseModel): + """Shared fields for all category-specific element create models.""" + + ref: str = Field(..., description="Unique reference for this element.") + parent_element: int | str | None = Field( + default=None, + description="Parent container: int ID (existing) or string ref (same batch).", + ) + place_in_container: str | None = Field( + default=None, description="Position in parent container (e.g. '0', '1')." + ) + + +class DisplayElementCreate(_ElementBase): + """ + Create display elements: heading, text, button, link, image. + + Use ``$formula:`` prefix for dynamic values (e.g. ``"$formula: the product name"``). + Static strings are auto-wrapped. + """ + + type: Literal["heading", "text", "button", "link", "image"] = Field( + ..., description="Element type." + ) + value: str | None = Field( + default=None, + description="Display text (heading, text, button label, link text). Supports $formula: prefix.", + ) + level: int | None = Field(default=None, description="(heading) Level 1-5.") + format: str | None = Field( + default=None, description="(text) 'plain' or 'markdown'." + ) + navigation_type: Literal["page", "custom"] | None = Field( + default=None, description="(link) Navigation type." + ) + navigate_to_page_id: int | None = Field( + default=None, description="(link) Target page ID." + ) + navigate_to_url: str | None = Field( + default=None, + description="(link) Custom URL. Supports $formula: prefix.", + ) + link_variant: Literal["link", "button"] | None = Field( + default=None, description="(link) Display variant." + ) + image_url: str | None = Field( + default=None, + description="(image) Image URL. Supports $formula: prefix.", + ) + alt_text: str | None = Field( + default=None, + description="(image) Alt text. Supports $formula: prefix.", + ) + + def to_element_item_create(self) -> "ElementItemCreate": + return ElementItemCreate( + ref=self.ref, + type=self.type, + parent_element=self.parent_element, + place_in_container=self.place_in_container, + value=self.value, + level=self.level, + format=self.format, + navigation_type=self.navigation_type, + navigate_to_page_id=self.navigate_to_page_id, + navigate_to_url=self.navigate_to_url, + link_variant=self.link_variant, + image_url=self.image_url, + alt_text=self.alt_text, + ) + + +class LayoutElementCreate(_ElementBase): + """ + Create layout/navigation elements: column, simple_container, header, footer, menu. + + Layout elements are containers — other elements go inside them via ``parent_element``. + """ + + type: Literal["column", "simple_container", "header", "footer", "menu"] = Field( + ..., description="Element type." + ) + column_amount: int | None = Field( + default=None, description="(column) Number of columns (1-6)." + ) + menu_items: list[MenuItemCreate] | None = Field( + default=None, description="(menu) Menu item configurations." + ) + share_type: Literal["all", "only", "except"] | None = Field( + default=None, + description="(header, footer) Page sharing: 'all' (default), 'only' (show on page_ids only), 'except' (hide on page_ids).", + ) + page_ids: list[int] | None = Field( + default=None, + description="(header, footer) Page IDs for share_type='only' or 'except'.", + ) + + def to_element_item_create(self) -> "ElementItemCreate": + return ElementItemCreate( + ref=self.ref, + type=self.type, + parent_element=self.parent_element, + place_in_container=self.place_in_container, + column_amount=self.column_amount, + menu_items=self.menu_items, + share_type=self.share_type, + page_ids=self.page_ids, + ) + + +class FormElementCreate(_ElementBase): + """ + Create form elements: form_container, input_text, choice, checkbox, datetime_picker, record_selector. + + Form inputs go inside a ``form_container`` (set ``parent_element`` to the form ref). + Use ``$formula:`` prefix for dynamic default values. + """ + + type: Literal[ + "form_container", + "input_text", + "choice", + "checkbox", + "datetime_picker", + "record_selector", + ] = Field(..., description="Element type.") + label: str | None = Field(default=None, description="(form inputs) Field label.") + placeholder: str | None = Field( + default=None, description="(form inputs) Placeholder text." + ) + default_value: str | None = Field( + default=None, + description="(form inputs) Default value. Supports $formula: prefix.", + ) + required: bool | None = Field( + default=None, description="(form inputs) Required field." + ) + validation_type: Literal["any", "email", "integer"] | None = Field( + default=None, description="(input_text) Validation type." + ) + is_multiline: bool | None = Field( + default=None, description="(input_text) Multiline mode." + ) + multiple: bool | None = Field( + default=None, description="(choice, record_selector) Allow multiple." + ) + choice_options: list[ChoiceOption] | None = Field( + default=None, description="(choice) List of options." + ) + include_time: bool | None = Field( + default=None, description="(datetime_picker) Include time." + ) + date_format: Literal["EU", "US", "ISO"] | None = Field( + default=None, description="(datetime_picker) Date format." + ) + submit_button_label: str | None = Field( + default=None, description="(form_container) Submit button label." + ) + data_source: int | str | None = Field( + default=None, + description="(record_selector) Data source: int ID or string ref.", + ) + + def to_element_item_create(self) -> "ElementItemCreate": + return ElementItemCreate( + ref=self.ref, + type=self.type, + parent_element=self.parent_element, + place_in_container=self.place_in_container, + label=self.label, + placeholder=self.placeholder, + default_value=self.default_value, + required=self.required, + validation_type=self.validation_type, + is_multiline=self.is_multiline, + multiple=self.multiple, + choice_options=self.choice_options, + include_time=self.include_time, + date_format=self.date_format, + submit_button_label=self.submit_button_label, + data_source=self.data_source, + ) + + +class CollectionElementCreate(_ElementBase): + """ + Create collection elements: table, repeat. + + These display data from a data source. Create data sources first, then reference them here. + """ + + type: Literal["table", "repeat"] = Field(..., description="Element type.") + data_source: int | str | None = Field( + default=None, + description="Data source: int ID (existing) or string ref (same batch).", + ) + fields: list[TableFieldConfig] | None = Field( + default=None, description="(table) Column configurations." + ) + orientation: Literal["vertical", "horizontal"] | None = Field( + default=None, description="(repeat) Orientation." + ) + + def to_element_item_create(self) -> "ElementItemCreate": + return ElementItemCreate( + ref=self.ref, + type=self.type, + parent_element=self.parent_element, + place_in_container=self.place_in_container, + data_source=self.data_source, + fields=self.fields, + orientation=self.orientation, + ) + + +# --------------------------------------------------------------------------- +# ElementUpdate (flat, for updating existing elements) +# --------------------------------------------------------------------------- + + +def _heading_update(el: "ElementUpdate") -> dict: + kwargs: dict[str, Any] = {} + if el.value is not None: + kwargs["value"] = BaserowFormulaObject.create( + literal_or_placeholder(el.value) + if needs_formula(el.value) + else wrap_static_string(el.value), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + if el.level is not None: + kwargs["level"] = el.level + return kwargs + + +def _text_update(el: "ElementUpdate") -> dict: + kwargs: dict[str, Any] = {} + if el.value is not None: + kwargs["value"] = BaserowFormulaObject.create( + literal_or_placeholder(el.value) + if needs_formula(el.value) + else wrap_static_string(el.value), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + if el.format is not None: + kwargs["format"] = el.format + return kwargs + + +def _button_update(el: "ElementUpdate") -> dict: + kwargs: dict[str, Any] = {} + text = el.value or el.label + if text is not None: + kwargs["value"] = BaserowFormulaObject.create( + literal_or_placeholder(text) + if needs_formula(text) + else wrap_static_string(text), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + return kwargs + + +def _link_update(el: "ElementUpdate") -> dict: + kwargs: dict[str, Any] = {} + if el.value is not None: + kwargs["value"] = BaserowFormulaObject.create( + literal_or_placeholder(el.value) + if needs_formula(el.value) + else wrap_static_string(el.value), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + if el.link_variant is not None: + kwargs["variant"] = el.link_variant + if el.navigation_type is not None: + kwargs["navigation_type"] = el.navigation_type + if el.link_target is not None: + kwargs["target"] = el.link_target + if el.navigate_to_page_id is not None: + kwargs["navigate_to_page_id"] = el.navigate_to_page_id + if el.navigate_to_url is not None: + kwargs["navigate_to_url"] = BaserowFormulaObject.create( + literal_or_placeholder(el.navigate_to_url) + if needs_formula(el.navigate_to_url) + else wrap_static_string(el.navigate_to_url), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + return kwargs + + +def _image_update(el: "ElementUpdate") -> dict: + kwargs: dict[str, Any] = {} + if el.image_source_type is not None: + kwargs["image_source_type"] = el.image_source_type + if el.image_url is not None: + kwargs["image_url"] = BaserowFormulaObject.create( + literal_or_placeholder(el.image_url) + if needs_formula(el.image_url) + else wrap_static_string(el.image_url), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + if el.alt_text is not None: + kwargs["alt_text"] = BaserowFormulaObject.create( + literal_or_placeholder(el.alt_text) + if needs_formula(el.alt_text) + else wrap_static_string(el.alt_text), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + return kwargs + + +def _column_update(el: "ElementUpdate") -> dict: + kwargs: dict[str, Any] = {} + if el.column_amount is not None: + kwargs["column_amount"] = el.column_amount + if el.column_gap is not None: + kwargs["column_gap"] = el.column_gap + if el.column_alignment is not None: + kwargs["alignment"] = el.column_alignment + return kwargs + + +def _form_container_update(el: "ElementUpdate") -> dict: + kwargs: dict[str, Any] = {} + if el.submit_button_label is not None: + kwargs["submit_button_label"] = BaserowFormulaObject.create( + f"'{el.submit_button_label}'", + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + return kwargs + + +def _input_text_update(el: "ElementUpdate") -> dict: + kwargs: dict[str, Any] = {} + if el.label is not None: + kwargs["label"] = BaserowFormulaObject.create( + f"'{el.label}'", mode=BASEROW_FORMULA_MODE_ADVANCED + ) + if el.placeholder is not None: + kwargs["placeholder"] = BaserowFormulaObject.create( + f"'{el.placeholder}'", mode=BASEROW_FORMULA_MODE_ADVANCED + ) + if el.default_value is not None: + kwargs["default_value"] = BaserowFormulaObject.create( + literal_or_placeholder(el.default_value) + if needs_formula(el.default_value) + else (wrap_static_string(el.default_value) if el.default_value else "''"), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + if el.required is not None: + kwargs["required"] = el.required + if el.validation_type is not None: + kwargs["validation_type"] = el.validation_type + if el.is_multiline is not None: + kwargs["is_multiline"] = el.is_multiline + if el.rows is not None: + kwargs["rows"] = el.rows + return kwargs + + +def _choice_update(el: "ElementUpdate") -> dict: + kwargs: dict[str, Any] = {} + if el.label is not None: + kwargs["label"] = BaserowFormulaObject.create( + f"'{el.label}'", mode=BASEROW_FORMULA_MODE_ADVANCED + ) + if el.placeholder is not None: + kwargs["placeholder"] = BaserowFormulaObject.create( + f"'{el.placeholder}'", mode=BASEROW_FORMULA_MODE_ADVANCED + ) + if el.default_value is not None: + kwargs["default_value"] = BaserowFormulaObject.create( + literal_or_placeholder(el.default_value) + if needs_formula(el.default_value) + else (wrap_static_string(el.default_value) if el.default_value else "''"), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + if el.required is not None: + kwargs["required"] = el.required + if el.multiple is not None: + kwargs["multiple"] = el.multiple + if el.show_as_dropdown is not None: + kwargs["show_as_dropdown"] = el.show_as_dropdown + return kwargs + + +def _checkbox_update(el: "ElementUpdate") -> dict: + kwargs: dict[str, Any] = {} + if el.label is not None: + kwargs["label"] = BaserowFormulaObject.create( + f"'{el.label}'", mode=BASEROW_FORMULA_MODE_ADVANCED + ) + if el.default_value is not None: + kwargs["default_value"] = BaserowFormulaObject.create( + literal_or_placeholder(el.default_value) + if needs_formula(el.default_value) + else el.default_value, + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + if el.required is not None: + kwargs["required"] = el.required + return kwargs + + +def _datetime_picker_update(el: "ElementUpdate") -> dict: + kwargs: dict[str, Any] = {} + if el.label is not None: + kwargs["label"] = BaserowFormulaObject.create( + f"'{el.label}'", mode=BASEROW_FORMULA_MODE_ADVANCED + ) + if el.default_value is not None: + kwargs["default_value"] = BaserowFormulaObject.create( + literal_or_placeholder(el.default_value) + if needs_formula(el.default_value) + else (wrap_static_string(el.default_value) if el.default_value else "''"), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + if el.required is not None: + kwargs["required"] = el.required + if el.include_time is not None: + kwargs["include_time"] = el.include_time + if el.date_format is not None: + kwargs["date_format"] = el.date_format + return kwargs + + +def _repeat_update(el: "ElementUpdate") -> dict: + kwargs: dict[str, Any] = {} + if el.orientation is not None: + kwargs["orientation"] = el.orientation + if el.items_per_page is not None: + kwargs["items_per_page"] = el.items_per_page + return kwargs + + +def _table_update(el: "ElementUpdate") -> dict: + kwargs: dict[str, Any] = {} + if el.items_per_page is not None: + kwargs["items_per_page"] = el.items_per_page + if el.button_load_more_label is not None: + kwargs["button_load_more_label"] = BaserowFormulaObject.create( + f"'{el.button_load_more_label}'", + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + has_field_change = ( + el.fields is not None + or el.add_fields is not None + or el.remove_fields is not None + ) + if has_field_change: + from baserow.contrib.builder.elements.service import ElementHandler + + try: + element = ElementHandler().get_element(el.element_id).specific + ds_id = getattr(element, "data_source_id", None) + except Exception: + element = None + ds_id = None + + if el.fields is not None: + # Full replace + kwargs["fields"] = _convert_table_fields( + data_source_id=ds_id, fields=el.fields + ) + else: + # Incremental: start from existing fields + existing = [] + if element is not None and hasattr(element, "fields"): + for f in element.fields.order_by("order"): + existing.append( + { + "name": f.name, + "type": f.type, + "config": f.config, + "uid": str(f.uid), + } + ) + + # Remove by name (case-insensitive) + if el.remove_fields: + remove_set = {n.lower() for n in el.remove_fields} + existing = [f for f in existing if f["name"].lower() not in remove_set] + + # Append new columns + if el.add_fields: + new_fields = _convert_table_fields( + data_source_id=ds_id, fields=el.add_fields + ) + existing.extend(new_fields) + + kwargs["fields"] = existing + return kwargs + + +def _header_update(el: "ElementUpdate") -> dict: + kwargs: dict[str, Any] = {} + if el.share_type is not None: + kwargs["share_type"] = el.share_type + return kwargs + + +def _menu_update(el: "ElementUpdate") -> dict: + kwargs: dict[str, Any] = {} + if el.menu_orientation is not None: + kwargs["orientation"] = el.menu_orientation + if el.menu_alignment is not None: + kwargs["alignment"] = el.menu_alignment + if el.menu_items is not None: + kwargs["menu_items"] = [ + { + "uid": str(uuid.uuid4()), + "type": "link", + "variant": "link", + "name": item.name, + "navigation_type": "page", + "navigate_to_page_id": item.page_id, + "target": "self", + } + for item in el.menu_items + ] + return kwargs + + +_TO_ORM_UPDATE: dict[str, Any] = { + "heading": _heading_update, + "text": _text_update, + "button": _button_update, + "link": _link_update, + "image": _image_update, + "column": _column_update, + "form_container": _form_container_update, + "simple_container": lambda el: {}, + "input_text": _input_text_update, + "choice": _choice_update, + "checkbox": _checkbox_update, + "datetime_picker": _datetime_picker_update, + "record_selector": _input_text_update, + "table": _table_update, + "repeat": _repeat_update, + "header": _header_update, + "footer": _header_update, + "menu": _menu_update, +} + + +def _update_value_formula(el: "ElementUpdate", orm_element, context) -> dict[str, str]: + if el.value and needs_formula(el.value): + return {"value": formula_desc(el.value)} + return {} + + +def _update_link_formulas(el: "ElementUpdate", orm_element, context) -> dict[str, str]: + formulas: dict[str, str] = {} + if el.value and needs_formula(el.value): + formulas["value"] = formula_desc(el.value) + if el.navigate_to_url and needs_formula(el.navigate_to_url): + formulas["navigate_to_url"] = formula_desc(el.navigate_to_url) + return formulas + + +def _update_image_formulas(el: "ElementUpdate", orm_element, context) -> dict[str, str]: + formulas: dict[str, str] = {} + if el.image_url and needs_formula(el.image_url): + formulas["image_url"] = formula_desc(el.image_url) + if el.alt_text and needs_formula(el.alt_text): + formulas["alt_text"] = formula_desc(el.alt_text) + return formulas + + +def _update_default_value_formula( + el: "ElementUpdate", orm_element, context +) -> dict[str, str]: + if el.default_value and needs_formula(el.default_value): + return {"default_value": formula_desc(el.default_value)} + return {} + + +_GET_UPDATE_FORMULAS: dict[str, Any] = { + "heading": _update_value_formula, + "text": _update_value_formula, + "button": _update_value_formula, + "link": _update_link_formulas, + "image": _update_image_formulas, + "input_text": _update_default_value_formula, + "choice": _update_default_value_formula, + "checkbox": _update_default_value_formula, + "datetime_picker": _update_default_value_formula, +} + + +class ElementUpdate(BaseModel): + """ + Flat model for updating an existing builder UI element. + + All fields are optional. Only non-None fields are sent to the service layer. + The element type is read from the database, not passed by the LLM. + """ + + element_id: int = Field(..., description="ID of the element to update.") + + # -- Common --------------------------------------------------------------- + visibility: Literal["all", "logged-in", "not-logged"] | None = Field( + default=None, description="Element visibility." + ) + role_type: ( + Literal["allow_all", "allow_all_except", "disallow_all_except"] | None + ) = Field(default=None, description="Role access strategy.") + roles: list[str] | None = Field( + default=None, description="Role names for the access strategy." + ) + + # -- Display fields ------------------------------------------------------- + value: str | None = Field( + default=None, + description="Display text (heading, text, button, link). Supports $formula: prefix.", + ) + level: int | None = Field(default=None, description="(heading) Level 1-5.") + format: str | None = Field( + default=None, description="(text) 'plain' or 'markdown'." + ) + + # -- Link fields ---------------------------------------------------------- + link_variant: Literal["link", "button"] | None = Field( + default=None, description="(link) Display variant." + ) + navigation_type: Literal["page", "custom"] | None = Field( + default=None, description="(link) Navigation type." + ) + navigate_to_page_id: int | None = Field( + default=None, description="(link) Target page ID." + ) + navigate_to_url: str | None = Field( + default=None, + description="(link) Custom URL. Supports $formula: prefix.", + ) + link_target: Literal["self", "blank"] | None = Field( + default=None, description="(link) Navigation target." + ) + + # -- Image fields --------------------------------------------------------- + image_source_type: Literal["upload", "url"] | None = Field( + default=None, description="(image) Source type." + ) + image_url: str | None = Field( + default=None, + description="(image) Image URL. Supports $formula: prefix.", + ) + alt_text: str | None = Field( + default=None, + description="(image) Alt text. Supports $formula: prefix.", + ) + + # -- Column fields -------------------------------------------------------- + column_amount: int | None = Field( + default=None, description="(column) Number of columns (1-6)." + ) + column_gap: int | None = Field( + default=None, description="(column) Gap between columns in px." + ) + column_alignment: Literal["top", "center", "bottom"] | None = Field( + default=None, description="(column) Vertical alignment." + ) + + # -- Form container fields ------------------------------------------------ + submit_button_label: str | None = Field( + default=None, description="(form_container) Submit button label." + ) + + # -- Form input fields ---------------------------------------------------- + label: str | None = Field(default=None, description="(form inputs) Field label.") + placeholder: str | None = Field( + default=None, description="(form inputs) Placeholder text." + ) + default_value: str | None = Field( + default=None, + description="(form inputs) Default value. Supports $formula: prefix.", + ) + required: bool | None = Field( + default=None, description="(form inputs) Required field." + ) + validation_type: Literal["any", "email", "integer"] | None = Field( + default=None, description="(input_text) Validation type." + ) + is_multiline: bool | None = Field( + default=None, description="(input_text) Multiline mode." + ) + rows: int | None = Field( + default=None, description="(input_text) Rows for multiline." + ) + multiple: bool | None = Field( + default=None, description="(choice, record_selector) Allow multiple." + ) + show_as_dropdown: bool | None = Field( + default=None, description="(choice) Show as dropdown." + ) + include_time: bool | None = Field( + default=None, description="(datetime_picker) Include time." + ) + date_format: Literal["EU", "US", "ISO"] | None = Field( + default=None, description="(datetime_picker) Date format." + ) + + # -- Collection fields ---------------------------------------------------- + items_per_page: int | None = Field( + default=None, description="(table, repeat) Items per page." + ) + button_load_more_label: str | None = Field( + default=None, description="(table) Load more button label." + ) + fields: list[TableFieldConfig] | None = Field( + default=None, + description="(table) Replace ALL columns — use only when you want to redefine the entire column list. Prefer add_fields/remove_fields for incremental changes.", + ) + add_fields: list[TableFieldConfig] | None = Field( + default=None, + description="(table) Append columns to the existing table. Existing columns are preserved.", + ) + remove_fields: list[str] | None = Field( + default=None, + description="(table) Remove columns by name (case-insensitive). Remaining columns are preserved.", + ) + orientation: Literal["vertical", "horizontal"] | None = Field( + default=None, description="(repeat) Orientation." + ) + + # -- Navigation fields ---------------------------------------------------- + share_type: Literal["all", "only", "except"] | None = Field( + default=None, description="(header, footer) Page sharing." + ) + menu_orientation: Literal["horizontal", "vertical"] | None = Field( + default=None, description="(menu) Menu orientation." + ) + menu_alignment: Literal["left", "center", "right", "justify"] | None = Field( + default=None, description="(menu) Menu alignment." + ) + menu_items: list[MenuItemCreate] | None = Field( + default=None, + description="(menu) Replace all menu items. Each item has name + page_id.", + ) + + # -- Dispatch ------------------------------------------------------------- + + def to_update_kwargs(self, element_type: str) -> dict: + """Return kwargs for ``ElementService.update_element()``.""" + + fn = _TO_ORM_UPDATE.get(element_type) + kwargs = fn(self) if fn else {} + + # Handle visibility (common to all types) + if self.visibility is not None: + kwargs["visibility"] = self.visibility + if self.role_type is not None: + kwargs["role_type"] = self.role_type + if self.roles is not None: + kwargs["roles"] = self.roles + + return kwargs + + def get_formulas_to_update( + self, + orm_element: "Element", + context: "BuilderFormulaContext", + element_type: str, + ) -> dict[str, str]: + """Return ``{field_path: description}`` for LLM formula generation.""" + + fn = _GET_UPDATE_FORMULAS.get(element_type) + return fn(self, orm_element, context) if fn else {} + + def get_updated_field_names(self) -> list[str]: + """Return names of fields that were explicitly set (non-None).""" + + skip = {"element_id"} + return [ + name + for name, field_info in self.__class__.model_fields.items() + if name not in skip and getattr(self, name) is not None + ] + + +class ElementItem(BaseModel): + """Existing element with ID.""" + + id: int + type: str + order: str + parent_element_id: int | None = None + place_in_container: str | None = None + is_container: bool = Field( + default=False, + description="True if this element can contain child elements.", + ) + label: str | None = Field( + default=None, + description="Short content preview (text value, label, or name).", + ) + page_name: str | None = Field( + default=None, + description="Page name. '[shared]' for elements on the shared page (headers/footers).", + ) + menu_items: list[dict] | None = Field( + default=None, + description="(menu) Current menu items with name and page_id.", + ) + + @classmethod + def from_orm(cls, element) -> "ElementItem": + """Create ElementItem from ORM Element instance.""" + element_type = element.get_type().type + page = element.page + page_name = "[shared]" if page.shared else page.name + menu_items = None + if element_type == "menu": + specific = element.specific + menu_items = [ + { + "name": item.name, + "page_id": item.navigate_to_page_id, + "type": item.type, + } + for item in specific.menu_items.all().order_by("menu_item_order") + ] + return cls( + id=element.id, + type=element_type, + order=str(element.order), + parent_element_id=element.parent_element_id, + place_in_container=element.place_in_container, + is_container=element_type in CONTAINER_ELEMENT_TYPES, + label=cls._extract_label(element), + page_name=page_name, + menu_items=menu_items, + ) + + @staticmethod + def _extract_label(element) -> str | None: + """Extract a short content preview from the element's ORM fields. + + FormulaField values are ``BaserowFormulaObject`` dicts with a + ``formula`` key; plain strings are also possible for legacy data. + """ + + # Display elements (heading, text, button, link) use ``value`` + # Form inputs (input_text, choice, checkbox) use ``label`` + raw = getattr(element, "value", None) or getattr(element, "label", None) + if not raw: + return None + # FormulaField returns a dict like {"formula": "...", "mode": ..., "version": ...} + if isinstance(raw, dict): + raw = raw.get("formula", "") or raw.get("f", "") + if not isinstance(raw, str) or not raw.strip(): + return None + preview = raw.strip() + if len(preview) > 80: + preview = preview[:77] + "..." + return preview + + +# --------------------------------------------------------------------------- +# Element move model +# --------------------------------------------------------------------------- + + +# --------------------------------------------------------------------------- +# Style override block types +# --------------------------------------------------------------------------- + + +class ButtonStyleOverride(BaseModel): + """Per-element button style overrides.""" + + model_config = {"extra": "forbid"} + + background_color: str | None = Field(default=None, description="Button bg color.") + text_color: str | None = Field(default=None, description="Button text color.") + border_color: str | None = Field(default=None, description="Button border color.") + border_size: int | None = Field(default=None) + border_radius: int | None = Field(default=None) + hover_background_color: str | None = Field(default=None) + hover_text_color: str | None = Field(default=None) + font_size: int | None = Field(default=None) + width: Literal["auto", "full"] | None = Field(default=None) + alignment: Literal["left", "center", "right"] | None = Field(default=None) + + def to_styles_dict(self) -> dict: + return {f"button_{k}": v for k, v in self.model_dump(exclude_none=True).items()} + + +class LinkStyleOverride(BaseModel): + """Per-element link style overrides.""" + + model_config = {"extra": "forbid"} + + text_color: str | None = Field(default=None) + hover_text_color: str | None = Field(default=None) + font_size: int | None = Field(default=None) + font_weight: str | None = Field(default=None) + + def to_styles_dict(self) -> dict: + return {f"link_{k}": v for k, v in self.model_dump(exclude_none=True).items()} + + +class TypographyStyleOverride(BaseModel): + """Per-element typography overrides (heading/text elements).""" + + model_config = {"extra": "forbid"} + + heading_1_text_color: str | None = Field(default=None) + heading_1_font_size: int | None = Field(default=None) + heading_1_font_weight: str | None = Field(default=None) + heading_1_text_alignment: Literal["left", "center", "right"] | None = Field( + default=None + ) + body_text_color: str | None = Field(default=None) + body_font_size: int | None = Field(default=None) + body_font_weight: str | None = Field(default=None) + body_text_alignment: Literal["left", "center", "right"] | None = Field(default=None) + + def to_styles_dict(self) -> dict: + return self.model_dump(exclude_none=True) + + +class InputStyleOverride(BaseModel): + """Per-element input style overrides.""" + + model_config = {"extra": "forbid"} + + input_background_color: str | None = Field(default=None) + input_border_color: str | None = Field(default=None) + input_text_color: str | None = Field(default=None) + input_border_size: int | None = Field(default=None) + input_border_radius: int | None = Field(default=None) + label_text_color: str | None = Field(default=None) + + def to_styles_dict(self) -> dict: + return self.model_dump(exclude_none=True) + + +class TableStyleOverride(BaseModel): + """Per-element table style overrides.""" + + model_config = {"extra": "forbid"} + + table_header_background_color: str | None = Field(default=None) + table_header_text_color: str | None = Field(default=None) + table_cell_background_color: str | None = Field(default=None) + table_border_color: str | None = Field(default=None) + table_border_size: int | None = Field(default=None) + + def to_styles_dict(self) -> dict: + return self.model_dump(exclude_none=True) + + +class ImageStyleOverride(BaseModel): + """Per-element image style overrides.""" + + model_config = {"extra": "forbid"} + + image_alignment: Literal["left", "center", "right"] | None = Field(default=None) + image_max_width: int | None = Field(default=None) + image_max_height: int | None = Field(default=None) + image_border_radius: int | None = Field(default=None) + + def to_styles_dict(self) -> dict: + return self.model_dump(exclude_none=True) + + +# --------------------------------------------------------------------------- +# Style update model +# --------------------------------------------------------------------------- + +_STYLE_DEFAULTS: dict[str, Any] = { + "style_border_top_color": "border", + "style_border_top_size": 0, + "style_border_bottom_color": "border", + "style_border_bottom_size": 0, + "style_border_left_color": "border", + "style_border_left_size": 0, + "style_border_right_color": "border", + "style_border_right_size": 0, + "style_padding_top": 10, + "style_padding_bottom": 10, + "style_padding_left": 20, + "style_padding_right": 20, + "style_margin_top": 0, + "style_margin_bottom": 0, + "style_margin_left": 0, + "style_margin_right": 0, + "style_border_radius": 0, + "style_background_radius": 0, + "style_background": "none", + "style_background_color": "#ffffffff", + "style_background_mode": "fill", + "style_width": "normal", +} + +# Maps (element_type, tool_block_name) → styles JSON key. +# The styles JSON key is the serializer's `property_name`, which varies per +# element type. E.g. for "menu", both button and link props go under "menu". +_BLOCK_TO_STYLES_KEY: dict[str, dict[str, str]] = { + "heading": {"typography": "typography"}, + "text": {"typography": "typography"}, + "button": {"button": "button"}, + "link": {"button": "button", "link": "link"}, + "image": {"image": "image"}, + "input_text": {"input": "input"}, + "choice": {"input": "input"}, + "checkbox": {"input": "input"}, + "table": {"button": "button", "table": "table"}, + "repeat": {"button": "button"}, + "menu": {"button": "menu", "link": "menu"}, + "form_container": {"button": "button"}, +} + + +class ElementStyleUpdate(BaseModel): + """ + Compact model for updating element visual styles. + + All fields optional — only non-None fields are applied. + Set reset=true to restore all styles to defaults first. + """ + + element_id: int = Field(..., description="ID of the element to style.") + reset: bool = Field( + default=False, description="Reset all styles to defaults first." + ) + + # -- Box model: single value for all sides, or dict for per-side -- + border_color: str | dict[str, str] | None = Field( + default=None, + description='Border color: value for all sides, or {"left": "#ff0000", ...} for specific sides.', + ) + border_size: int | dict[str, int] | None = Field( + default=None, + description='Border size in px: value for all sides, or {"top": 2, ...} for specific sides.', + ) + padding: int | dict[str, int] | None = Field( + default=None, + description='Padding in px: value for all sides, or {"left": 0, ...} for specific sides.', + ) + margin: int | dict[str, int] | None = Field( + default=None, + description='Margin in px: value for all sides, or {"top": 10, ...} for specific sides.', + ) + + @model_validator(mode="after") + def _validate_box_sides(self) -> "ElementStyleUpdate": + valid_sides = {"top", "bottom", "left", "right"} + for field_name in ("padding", "margin", "border_size", "border_color"): + val = getattr(self, field_name) + if isinstance(val, dict): + invalid = set(val.keys()) - valid_sides + if invalid: + raise ValueError(f"{field_name}: invalid sides {invalid}") + return self + + # -- Radii -- + border_radius: int | None = Field(default=None) + background_radius: int | None = Field(default=None) + + # -- Background -- + background: Literal["none", "color"] | None = Field(default=None) + background_color: str | None = Field( + default=None, description="Background color (hex)." + ) + + # -- Width -- + width: Literal["full", "full-width", "normal", "medium", "small"] | None = Field( + default=None + ) + + # -- Theme style overrides (per element type) -- + button: ButtonStyleOverride | None = Field( + default=None, description="Button style overrides." + ) + link: LinkStyleOverride | None = Field( + default=None, description="Link style overrides." + ) + typography: TypographyStyleOverride | None = Field( + default=None, description="Typography overrides." + ) + input: InputStyleOverride | None = Field( + default=None, description="Input style overrides." + ) + table: TableStyleOverride | None = Field( + default=None, description="Table style overrides." + ) + image: ImageStyleOverride | None = Field( + default=None, description="Image style overrides." + ) + + def _apply_box(self, kwargs: dict, field_name: str, orm_template: str): + val = getattr(self, field_name) + if val is None: + return + if isinstance(val, dict): + for side, side_val in val.items(): + kwargs[orm_template.format(side=side)] = side_val + else: + for side in ("top", "bottom", "left", "right"): + kwargs[orm_template.format(side=side)] = val + + def to_update_kwargs( + self, element_type: str, existing_styles: dict | None = None + ) -> dict: + """Convert to ORM kwargs for ElementService.update_element(). + + :param element_type: The element's type string (e.g. "button"). + :param existing_styles: The element's current ``styles`` JSON dict. + Used to merge theme overrides without wiping unrelated keys. + """ + + kwargs: dict[str, Any] = {} + + if self.reset: + kwargs.update(_STYLE_DEFAULTS) + kwargs["styles"] = {} + + # Box model — uniform or per-side + self._apply_box(kwargs, "border_color", "style_border_{side}_color") + self._apply_box(kwargs, "border_size", "style_border_{side}_size") + self._apply_box(kwargs, "padding", "style_padding_{side}") + self._apply_box(kwargs, "margin", "style_margin_{side}") + + # Simple style fields + if self.border_radius is not None: + kwargs["style_border_radius"] = self.border_radius + if self.background_radius is not None: + kwargs["style_background_radius"] = self.background_radius + if self.background is not None: + kwargs["style_background"] = self.background + if self.background_color is not None: + kwargs["style_background_color"] = self.background_color + if self.width is not None: + kwargs["style_width"] = self.width + + # Theme style overrides — merge into existing styles JSON. + # Start from existing styles (or {} after reset) so we don't wipe + # keys that weren't touched in this call. + block_key_map = _BLOCK_TO_STYLES_KEY.get(element_type, {}) + if self.reset: + styles: dict = {} + else: + styles = dict(existing_styles) if existing_styles else {} + # Deep-copy block dicts so we don't mutate the original + for k, v in styles.items(): + if isinstance(v, dict): + styles[k] = dict(v) + styles_changed = False + for block_name in ("button", "link", "typography", "input", "table", "image"): + override = getattr(self, block_name) + target_key = block_key_map.get(block_name) + if override is not None and target_key is not None: + block_dict = override.to_styles_dict() + if block_dict: + styles[target_key] = { + **styles.get(target_key, {}), + **block_dict, + } + styles_changed = True + if styles_changed or "styles" in kwargs: + kwargs["styles"] = styles + + return kwargs + + +class ElementMove(BaseModel): + """Describes a single element move operation.""" + + element_id: int = Field(description="ID of the element to move.") + before_id: int | None = Field( + default=None, + description="Place before this element ID. None = move to end.", + ) + parent_element_id: int | None = Field( + default=None, + description="New parent element ID. None = move to root level.", + ) + place_in_container: str | None = Field( + default=None, + description='Container slot (e.g. "0", "1" for columns). None = default.', + ) diff --git a/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/types/page.py b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/types/page.py new file mode 100644 index 0000000000..a68865a343 --- /dev/null +++ b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/types/page.py @@ -0,0 +1,153 @@ +""" +Builder page type models. + +Defines ``PageCreate`` for creating pages and ``PageItem`` for reading them back. +""" + +from typing import Literal + +from pydantic import Field + +from baserow_enterprise.assistant.types import BaseModel + +RoleType = Literal["allow_all", "allow_all_except", "disallow_all_except"] + + +class PagePathParam(BaseModel): + """A path parameter definition (e.g. ``id`` in ``/products/:id``).""" + + name: str = Field(..., description="Parameter name.") + type: Literal["text", "numeric"] = Field("text", description="Parameter type.") + + +class PageQueryParam(BaseModel): + """A query parameter definition.""" + + name: str = Field(..., description="Parameter name.") + type: Literal["text", "numeric"] = Field("text", description="Parameter type.") + + +class PageCreate(BaseModel): + """Page creation payload.""" + + name: str = Field(..., description="Page name (unique in app).") + path: str = Field(..., description="URL path, e.g. '/products/:id'.") + path_params: list[PagePathParam] = Field( + default_factory=list, description="Path parameters." + ) + query_params: list[PageQueryParam] = Field( + default_factory=list, description="Query parameters." + ) + visibility: Literal["all", "logged-in"] = Field( + "all", description="'all' or 'logged-in'." + ) + role_type: RoleType = Field( + "allow_all", + description=( + "Role access strategy. Only relevant when visibility='logged-in'. " + "Use list_pages to see available_roles." + ), + ) + roles: list[str] = Field( + default_factory=list, + description="Role names for the access strategy.", + ) + + +class PageUpdate(BaseModel): + """ + Update an existing page's properties. + + All fields are optional. Only non-None fields are sent to the service layer. + """ + + page_id: int = Field(..., description="ID of the page to update.") + name: str | None = Field(default=None, description="New page name.") + path: str | None = Field(default=None, description="New URL path.") + path_params: list[PagePathParam] | None = Field( + default=None, description="New path parameters." + ) + query_params: list[PageQueryParam] | None = Field( + default=None, description="New query parameters." + ) + visibility: Literal["all", "logged-in"] | None = Field( + default=None, description="Page visibility." + ) + role_type: RoleType | None = Field( + default=None, description="Role access strategy." + ) + roles: list[str] | None = Field( + default=None, description="Role names for the access strategy." + ) + + def to_update_kwargs(self) -> dict: + """Return kwargs for ``PageService.update_page()``.""" + + kwargs: dict = {} + if self.name is not None: + kwargs["name"] = self.name + if self.path is not None: + kwargs["path"] = self.path + if self.path_params is not None: + kwargs["path_params"] = [p.model_dump() for p in self.path_params] + if self.query_params is not None: + kwargs["query_params"] = [q.model_dump() for q in self.query_params] + if self.visibility is not None: + kwargs["visibility"] = self.visibility + if self.role_type is not None: + kwargs["role_type"] = self.role_type + if self.roles is not None: + kwargs["roles"] = self.roles + return kwargs + + def get_updated_field_names(self) -> list[str]: + """Return names of fields that were explicitly set (non-None).""" + + skip = {"page_id"} + return [ + name + for name in self.__class__.model_fields + if name not in skip and getattr(self, name) is not None + ] + + +class PageItem(BaseModel): + """Existing page with ID.""" + + id: int + name: str + path: str + path_params: list[PagePathParam] = Field(default_factory=list) + query_params: list[PageQueryParam] = Field(default_factory=list) + visibility: str = "all" + role_type: str = "allow_all" + roles: list[str] = Field(default_factory=list) + + @classmethod + def from_orm(cls, page) -> "PageItem": + """Create a PageItem from a Django Page instance.""" + + path_params = [] + for p in page.path_params or []: + if isinstance(p, dict): + path_params.append( + PagePathParam(name=p["name"], type=p.get("type", "text")) + ) + + query_params = [] + for q in page.query_params or []: + if isinstance(q, dict): + query_params.append( + PageQueryParam(name=q["name"], type=q.get("type", "text")) + ) + + return cls( + id=page.id, + name=page.name, + path=page.path, + path_params=path_params, + query_params=query_params, + visibility=page.visibility, + role_type=page.role_type, + roles=page.roles or [], + ) diff --git a/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/types/user_source.py b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/types/user_source.py new file mode 100644 index 0000000000..7e493b8dd6 --- /dev/null +++ b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/types/user_source.py @@ -0,0 +1,52 @@ +""" +Builder user source type models. + +Defines ``UserSourceSetup`` for creating user sources with their backing +tables and authentication providers. +""" + +from pydantic import Field, model_validator + +from baserow_enterprise.assistant.types import BaseModel + +_DEFAULT_ROLES = ["Admin", "Member", "Viewer"] + + +class UserSourceSetup(BaseModel): + """ + Set up a user source for the application. + + Exactly one of ``table_id`` or ``database_id`` must be provided. + """ + + name: str = Field(..., description="Name for the user source.") + + table_id: int | None = Field( + None, description="Existing table ID to use as user source." + ) + database_id: int | None = Field( + None, description="Database ID to create a new users table in." + ) + + roles: list[str] | None = Field( + None, + description=( + "Role names for the SingleSelect role field. " + 'Defaults to ["Admin", "Member", "Viewer"]. ' + "Only used when creating a new table." + ), + ) + + @model_validator(mode="after") + def _check_table_or_database(self): + if not self.table_id and not self.database_id: + raise ValueError("One of 'table_id' or 'database_id' is required.") + if self.table_id and self.database_id: + raise ValueError( + "Only one of 'table_id' or 'database_id' can be provided, not both." + ) + return self + + def get_roles(self) -> list[str]: + """Return the roles to use, falling back to defaults.""" + return self.roles or list(_DEFAULT_ROLES) diff --git a/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/types/workflow_action.py b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/types/workflow_action.py new file mode 100644 index 0000000000..e27feebe14 --- /dev/null +++ b/enterprise/backend/src/baserow_enterprise/assistant/tools/builder/types/workflow_action.py @@ -0,0 +1,504 @@ +""" +Builder workflow action type models. + +Defines ``ActionCreate`` (flat) for creating workflow actions and +``ActionItem`` for reading them back. +""" + +from typing import TYPE_CHECKING, Any, Literal + +from pydantic import Field, model_validator + +from baserow.core.formula.types import ( + BASEROW_FORMULA_MODE_ADVANCED, + BaserowFormulaObject, +) +from baserow_enterprise.assistant.tools.shared.formula_utils import ( + formula_desc, + literal_or_placeholder, + needs_formula, +) +from baserow_enterprise.assistant.types import BaseModel + +if TYPE_CHECKING: + from baserow.contrib.builder.workflow_actions.models import BuilderWorkflowAction + from baserow_enterprise.assistant.tools.builder.agents import BuilderFormulaContext + +# --------------------------------------------------------------------------- +# Sub-models +# --------------------------------------------------------------------------- + +ActionType = Literal[ + "notification", + "open_page", + "create_row", + "update_row", + "delete_row", + "refresh_data_source", + "logout", +] + + +class ParameterMapping(BaseModel): + """Key-value parameter mapping for page/query parameters.""" + + name: str = Field(..., description="Parameter name.") + value: str = Field(..., description="Parameter value formula.") + + +class FieldValueMapping(BaseModel): + """Field-value mapping for row create/update actions.""" + + field_id: str = Field(..., description="The field ID (as string).") + value: str = Field( + ..., + description="Value or $formula: prefix + formula intent.", + ) + + +# --------------------------------------------------------------------------- +# Required fields per action type +# --------------------------------------------------------------------------- + +_REQUIRED_FIELDS: dict[str, tuple[str, ...]] = { + "notification": ("title",), + "open_page": ("navigate_to_page_id",), + "create_row": ("table_id", "field_values"), + "update_row": ("table_id", "row_id", "field_values"), + "delete_row": ("table_id", "row_id"), +} + + +def _strip_formula_prefix(value: str) -> str: + """ + Strip the ``$formula:`` prefix if present, returning the inner formula. + + The LLM sometimes adds the prefix to values that are already valid formulas + (e.g. ``$formula: get('current_record.id')``). In contexts where the value + is used directly (not routed through formula generation), we strip the + prefix so the underlying formula is used as-is. + """ + + if needs_formula(value): + return formula_desc(value) + return value + + +# --------------------------------------------------------------------------- +# ORM dispatch: action_type -> kwargs builder +# --------------------------------------------------------------------------- + + +def _notification_orm_kwargs(action: "ActionCreate") -> dict: + return { + "title": BaserowFormulaObject.create( + literal_or_placeholder(action.title), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ), + "description": BaserowFormulaObject.create( + literal_or_placeholder(action.description), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ), + } + + +def _open_page_orm_kwargs(action: "ActionCreate") -> dict: + return { + "navigation_type": "page", + "navigate_to_page_id": action.navigate_to_page_id, + "page_parameters": [ + { + "name": p.name, + "value": BaserowFormulaObject.create( + literal_or_placeholder(p.value), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ), + } + for p in (action.page_parameters or []) + ], + "query_parameters": [ + { + "name": p.name, + "value": BaserowFormulaObject.create( + literal_or_placeholder(p.value), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ), + } + for p in (action.query_parameters or []) + ], + "target": action.target, + } + + +def _refresh_ds_orm_kwargs(action: "ActionCreate") -> dict: + if isinstance(action.data_source, int): + return {"data_source_id": action.data_source} + return {} + + +_TO_ORM_KWARGS: dict[str, Any] = { + "notification": _notification_orm_kwargs, + "open_page": _open_page_orm_kwargs, + "refresh_data_source": _refresh_ds_orm_kwargs, + "logout": lambda _: {}, +} + +# --------------------------------------------------------------------------- +# Service type dispatch +# --------------------------------------------------------------------------- + +_SERVICE_TYPE: dict[str, str | None] = { + "notification": None, + "open_page": None, + "create_row": "local_baserow_upsert_row", + "update_row": "local_baserow_upsert_row", + "delete_row": "local_baserow_delete_row", + "refresh_data_source": None, + "logout": None, +} + + +def _row_service_kwargs(action: "ActionCreate", user, workspace) -> dict: + """Build service kwargs for row-based actions (create/update/delete).""" + + from baserow_enterprise.assistant.tools.builder.helpers import ToolInputError + from baserow_enterprise.assistant.tools.database.helpers import filter_tables + + table = filter_tables(user, workspace).filter(id=action.table_id).first() + if table is None: + raise ToolInputError(f"Table with id {action.table_id} not found.") + kwargs: dict[str, Any] = {"table": table} + + if action.type in ("update_row", "delete_row") and action.row_id: + kwargs["row_id"] = BaserowFormulaObject.create( + _strip_formula_prefix(action.row_id), + mode=BASEROW_FORMULA_MODE_ADVANCED, + ) + + return kwargs + + +# --------------------------------------------------------------------------- +# Field mapping dispatch +# --------------------------------------------------------------------------- + + +def _field_mappings(action: "ActionCreate") -> list[dict] | None: + """Build field mappings for create/update row actions.""" + + if action.type not in ("create_row", "update_row") or not action.field_values: + return None + + mappings = [] + for fv in action.field_values: + if needs_formula(fv.value): + formula_value = "''" + else: + formula_value = fv.value + mappings.append( + { + "field_id": int(fv.field_id), + "value": BaserowFormulaObject.create( + formula_value, mode=BASEROW_FORMULA_MODE_ADVANCED + ), + "enabled": True, + } + ) + return mappings + + +# --------------------------------------------------------------------------- +# Formula dispatch: get_formulas_to_create +# --------------------------------------------------------------------------- + + +def _row_formulas(action: "ActionCreate", orm_action, context) -> dict[str, str]: + """Get formulas for create_row / update_row / delete_row actions.""" + + formulas: dict[str, str] = {} + + # Row ID for update/delete + if action.type in ("update_row", "delete_row") and action.row_id: + if needs_formula(action.row_id): + formulas["row_id"] = formula_desc(action.row_id) + + # Field values for create/update + if action.field_values: + for fv in action.field_values: + if needs_formula(fv.value): + formulas[f"field_{fv.field_id}"] = formula_desc(fv.value) + + return formulas + + +def _open_page_formulas(action: "ActionCreate", orm_action, context) -> dict[str, str]: + """Get formulas for open_page page/query parameters.""" + + formulas: dict[str, str] = {} + for i, p in enumerate(action.page_parameters or []): + if needs_formula(p.value): + formulas[f"page_param_{i}"] = formula_desc(p.value) + for i, p in enumerate(action.query_parameters or []): + if needs_formula(p.value): + formulas[f"query_param_{i}"] = formula_desc(p.value) + return formulas + + +_GET_FORMULAS: dict[str, Any] = { + "create_row": _row_formulas, + "update_row": _row_formulas, + "delete_row": _row_formulas, + "open_page": _open_page_formulas, +} + +# --------------------------------------------------------------------------- +# Formula dispatch: update_action_with_formulas +# --------------------------------------------------------------------------- + + +def _update_row_formulas( + action: "ActionCreate", + orm_action: "BuilderWorkflowAction", + formulas: dict[str, str], +) -> None: + """Apply generated formulas to row-based workflow actions.""" + + if not formulas: + return + + service = orm_action.specific.service.specific + + # Update row_id + if "row_id" in formulas: + service.row_id = BaserowFormulaObject.create( + formulas["row_id"], mode=BASEROW_FORMULA_MODE_ADVANCED + ) + service.save(update_fields=["row_id"]) + + # Update field mappings + for mapping in service.field_mappings.all(): + key = f"field_{mapping.field_id}" + if key in formulas: + mapping.value = BaserowFormulaObject.create( + formulas[key], mode=BASEROW_FORMULA_MODE_ADVANCED + ) + mapping.save(update_fields=["value"]) + + +def _update_open_page_formulas( + action: "ActionCreate", + orm_action: "BuilderWorkflowAction", + formulas: dict[str, str], +) -> None: + """Apply generated formulas to open_page page/query parameters.""" + + if not formulas: + return + + specific = orm_action.specific + page_params = specific.page_parameters or [] + query_params = specific.query_parameters or [] + + for i, p in enumerate(page_params): + key = f"page_param_{i}" + if key in formulas: + p["value"] = BaserowFormulaObject.create( + formulas[key], mode=BASEROW_FORMULA_MODE_ADVANCED + ) + + for i, p in enumerate(query_params): + key = f"query_param_{i}" + if key in formulas: + p["value"] = BaserowFormulaObject.create( + formulas[key], mode=BASEROW_FORMULA_MODE_ADVANCED + ) + + specific.page_parameters = page_params + specific.query_parameters = query_params + specific.save(update_fields=["page_parameters", "query_parameters"]) + + +_UPDATE_FORMULAS: dict[str, Any] = { + "create_row": _update_row_formulas, + "update_row": _update_row_formulas, + "delete_row": _update_row_formulas, + "open_page": _update_open_page_formulas, +} + + +# --------------------------------------------------------------------------- +# ActionCreate (flat) +# --------------------------------------------------------------------------- + + +class ActionCreate(BaseModel): + """ + Flat model for creating a workflow action. + + All type-specific fields are optional — a ``@model_validator`` + enforces the correct required fields per type. + """ + + type: ActionType = Field(..., description="Action type.") + + element: int | str = Field( + ..., + description="Element this action is attached to: int ID (existing) or string ref (same batch).", + ) + event: str = Field( + default="click", + description="Event that triggers the action: click, submit, after_login.", + ) + + # notification + title: str | None = Field(default=None, description="(notification) Title formula.") + description: str | None = Field( + default=None, description="(notification) Message formula." + ) + + # open_page + navigate_to_page_id: int | None = Field( + default=None, description="(open_page) Target page ID." + ) + page_parameters: list[ParameterMapping] | None = Field( + default=None, description="(open_page) Page parameter mappings." + ) + query_parameters: list[ParameterMapping] | None = Field( + default=None, description="(open_page) Query parameter mappings." + ) + target: Literal["self", "blank"] = Field( + default="self", description="(open_page) Navigation target." + ) + + # create_row / update_row / delete_row + table_id: int | None = Field( + default=None, description="(row actions) Target table ID." + ) + row_id: str | None = Field( + default=None, + description="(update_row, delete_row) Row ID formula. Supports $formula: prefix.", + ) + field_values: list[FieldValueMapping] | None = Field( + default=None, + description="(create_row, update_row) Field value mappings. Supports $formula: prefix.", + ) + + # refresh_data_source + data_source: int | str | None = Field( + default=None, + description="(refresh_data_source) Data source: int ID or string ref.", + ) + + @model_validator(mode="after") + def _check_required(self): + for field_name in _REQUIRED_FIELDS.get(self.type, ()): + if getattr(self, field_name) is None: + raise ValueError(f"'{field_name}' is required for type '{self.type}'.") + return self + + # -- ORM helpers -------------------------------------------------------- + + def get_action_type(self) -> str: + """Return the action type string.""" + return self.type + + def get_service_type(self) -> str | None: + """Return the service type string, or None for non-service actions.""" + return _SERVICE_TYPE.get(self.type) + + def to_orm_kwargs(self) -> dict: + """Return non-service kwargs for action creation.""" + fn = _TO_ORM_KWARGS.get(self.type) + return fn(self) if fn else {} + + def to_service_kwargs(self, user, workspace) -> dict | None: + """Return service kwargs for service-based actions.""" + if self.get_service_type() is None: + return None + return _row_service_kwargs(self, user, workspace) + + def get_field_mappings(self) -> list[dict] | None: + """Return field mappings for service-based actions.""" + return _field_mappings(self) + + # -- Formula helpers ---------------------------------------------------- + + def get_formulas_to_create( + self, + orm_action: "BuilderWorkflowAction", + context: "BuilderFormulaContext", + ) -> dict[str, str]: + """Return ``{field_path: description}`` for LLM formula generation.""" + fn = _GET_FORMULAS.get(self.type) + return fn(self, orm_action, context) if fn else {} + + def update_with_formulas( + self, + orm_action: "BuilderWorkflowAction", + formulas: dict[str, str], + ) -> None: + """Apply LLM-generated formulas to this action.""" + fn = _UPDATE_FORMULAS.get(self.type) + if fn: + fn(self, orm_action, formulas) + + +# --------------------------------------------------------------------------- +# ActionItem (for listing) +# --------------------------------------------------------------------------- + + +class FieldMappingItem(BaseModel): + """Field mapping for create_row/update_row workflow actions.""" + + field_id: int + field_name: str + value: str + + +class ActionItem(BaseModel): + """Existing workflow action with ID.""" + + id: int + type: str + element_id: int | None = None + event: str = "click" + table_id: int | None = None + row_id_formula: str | None = None + field_mappings: list[FieldMappingItem] | None = None + + @classmethod + def from_orm(cls, action) -> "ActionItem": + """Create ActionItem from ORM BuilderWorkflowAction instance.""" + + action_type = action.get_type().type + kwargs: dict[str, Any] = { + "id": action.id, + "type": action_type, + "element_id": action.element_id, + "event": action.event, + } + + specific = action.specific + + if action_type in ("create_row", "update_row", "delete_row"): + if hasattr(specific, "service") and specific.service: + service = specific.service.specific + if hasattr(service, "table") and service.table: + kwargs["table_id"] = service.table_id + if hasattr(service, "row_id") and service.row_id: + kwargs["row_id_formula"] = str(service.row_id) + if action_type in ("create_row", "update_row"): + if hasattr(service, "field_mappings"): + mappings = [ + FieldMappingItem( + field_id=m.field_id, + field_name=m.field.name, + value=str(m.value) if m.value else "", + ) + for m in service.field_mappings.all() + ] + if mappings: + kwargs["field_mappings"] = mappings + + return cls(**kwargs) diff --git a/enterprise/backend/src/baserow_enterprise/assistant/tools/core/tools.py b/enterprise/backend/src/baserow_enterprise/assistant/tools/core/tools.py index f8dc64e0e2..4a3a68bf6c 100644 --- a/enterprise/backend/src/baserow_enterprise/assistant/tools/core/tools.py +++ b/enterprise/backend/src/baserow_enterprise/assistant/tools/core/tools.py @@ -11,7 +11,7 @@ from baserow.core.service import CoreService from baserow_enterprise.assistant.deps import AgentMode, AssistantDeps -from .types import BuilderItem, BuilderItemCreate, builder_type_registry +from .types import BuilderItem, BuilderItemCreate, BuilderUpdate, builder_type_registry def list_builders( @@ -169,5 +169,43 @@ def switch_mode( return f"Switched to {target.value} mode." -TOOL_FUNCTIONS = [list_builders, create_builders, switch_mode] +def update_builder( + ctx: RunContext[AssistantDeps], + update: Annotated[ + BuilderUpdate, Field(description="Application settings to update.") + ], + thought: Annotated[ + str, Field(description="Brief reasoning for calling this tool.") + ], +) -> dict[str, Any]: + """\ + Update an application's settings (name, login page, etc.). + + WHEN to use: User wants to rename an application, set a login page, or change application-level settings. + WHAT it does: Updates the specified application's settings. Fields are type-specific. + RETURNS: Updated application info. + HOW: For setting a login page on a builder app, use setup_user_source first (which creates the login page), then call this if you need to change it. + """ + + from baserow.core.handler import CoreHandler + + user = ctx.deps.user + + app = CoreService().get_application(user, update.builder_id).specific + ctx.deps.tool_helpers.update_status( + _("Updating %(app_name)s...") % {"app_name": app.name} + ) + + update_kwargs = update.to_update_kwargs(app) + if update_kwargs: + CoreHandler().update_application(user, app, **update_kwargs) + app.refresh_from_db() + + result: dict[str, Any] = {"id": app.id, "name": app.name} + if hasattr(app, "login_page_id"): + result["login_page_id"] = app.login_page_id + return result + + +TOOL_FUNCTIONS = [list_builders, create_builders, update_builder, switch_mode] core_toolset = FunctionToolset(TOOL_FUNCTIONS, max_retries=3) diff --git a/enterprise/backend/src/baserow_enterprise/assistant/tools/core/types.py b/enterprise/backend/src/baserow_enterprise/assistant/tools/core/types.py index 0612620349..c3a58ea951 100644 --- a/enterprise/backend/src/baserow_enterprise/assistant/tools/core/types.py +++ b/enterprise/backend/src/baserow_enterprise/assistant/tools/core/types.py @@ -1,4 +1,4 @@ -from typing import Annotated, Literal +from typing import Annotated, Literal, Type from pydantic import Field @@ -174,3 +174,35 @@ def from_django_orm(self, orm_app: BaserowApplication) -> BuilderItem: builder_type_registry = BuilderItemRegistry() + + +class BuilderUpdate(BaseModel): + """ + Update an existing application's settings. + + Fields are type-specific — only set the ones relevant to the application type. + """ + + builder_id: int = Field(..., description="ID of the application to update.") + name: str | None = Field(default=None, description="New name.") + + # Application (builder) specific + login_page_id: int | None = Field( + default=None, + description="(application) ID of the page to use as the login page.", + ) + + def to_update_kwargs(self, app: Type[BaserowApplication]) -> dict: + """Return kwargs for ``CoreHandler().update_application()``.""" + + app_type = application_type_registry.get_by_model(app.specific_class).type + + kwargs: dict = {} + if self.name is not None: + kwargs["name"] = self.name + + match app_type: + case "builder" | "application": + if self.login_page_id is not None: + kwargs["login_page_id"] = self.login_page_id + return kwargs diff --git a/enterprise/backend/src/baserow_enterprise/assistant/tools/database/helpers.py b/enterprise/backend/src/baserow_enterprise/assistant/tools/database/helpers.py index 1652f2a207..1ff487349d 100644 --- a/enterprise/backend/src/baserow_enterprise/assistant/tools/database/helpers.py +++ b/enterprise/backend/src/baserow_enterprise/assistant/tools/database/helpers.py @@ -41,10 +41,6 @@ from baserow_enterprise.assistant.deps import ToolHelpers -class ToolInputError(Exception): - """Raised when tool input is invalid — returned to the model as an error message.""" - - def filter_tables(user: AbstractUser, workspace: Workspace) -> QuerySet[Table]: """Return all tables visible to the user in the given workspace.""" @@ -54,6 +50,8 @@ def filter_tables(user: AbstractUser, workspace: Workspace) -> QuerySet[Table]: def get_table(user: AbstractUser, workspace: Workspace, table_id: int) -> Table: """Get a single table by ID, raising ToolInputError if not found.""" + from baserow_enterprise.assistant.tools.builder.helpers import ToolInputError + try: return filter_tables(user, workspace).get(id=table_id) except Table.DoesNotExist: diff --git a/enterprise/backend/src/baserow_enterprise/assistant/tools/database/tools.py b/enterprise/backend/src/baserow_enterprise/assistant/tools/database/tools.py index 08f221d1cf..92f4c960e8 100644 --- a/enterprise/backend/src/baserow_enterprise/assistant/tools/database/tools.py +++ b/enterprise/backend/src/baserow_enterprise/assistant/tools/database/tools.py @@ -1222,9 +1222,9 @@ def load_row_tools( database_toolset = FunctionToolset(TOOL_FUNCTIONS, max_retries=3) ROUTING_RULES = """\ -- Check list_* before create_* to avoid duplicates. - switch_mode: switch domain if task needs tools not in the current mode. - Database row CRUD → call load_row_tools first (includes schema — skip get_tables_schema). - create_tables: include ALL related tables in one call so link_row fields connect properly. Add sample rows unless told otherwise. - create_rows: fill EVERY field including ALL link_row fields. -- After creating tables for an app/automation task, switch_mode back to continue building.""" +- When creating views/filters for a builder data source, complete ALL view + filter creation before switching back to application mode. Workflow: create_views → create_view_filters → then switch_mode("application"). +- After creating tables or views for an application/data source/automation task, switch_mode back to continue building.""" diff --git a/enterprise/backend/src/baserow_enterprise/assistant/tools/database/types/views.py b/enterprise/backend/src/baserow_enterprise/assistant/tools/database/types/views.py index 72d9efd74b..fdbf2d7fdd 100644 --- a/enterprise/backend/src/baserow_enterprise/assistant/tools/database/types/views.py +++ b/enterprise/backend/src/baserow_enterprise/assistant/tools/database/types/views.py @@ -162,7 +162,7 @@ def _form_field_options_from_orm(orm_view): _FROM_DJANGO_ORM: dict[str, Any] = { - "grid": lambda v: {"row_height": "small"}, + "grid": lambda v: {"row_height": v.row_height_size}, "kanban": lambda v: {"column_field_id": v.single_select_field_id}, "calendar": lambda v: {"date_field_id": v.date_field_id}, "gallery": lambda v: {"cover_field_id": v.card_cover_image_field_id}, @@ -187,7 +187,7 @@ class ViewItemCreate(BaseModel): """Flat model for creating a view: name + type + type-specific options.""" name: str = Field(..., description="Descriptive view name.") - public: bool = Field(..., description="Publicly accessible? Default false.") + public: bool = Field(False, description="Publicly accessible? Default false.") type: ViewType = Field(..., description="View type.") # -- grid -- @@ -246,7 +246,7 @@ class ViewItemCreate(BaseModel): def _validate_required_for_type(self): required = self._REQUIRED_FIELDS.get(self.type) if required: - missing = [name for attr, name in required if not getattr(self, attr)] + missing = [name for attr, name in required if getattr(self, attr) is None] if missing: raise ValueError( f"{self.type} requires {', '.join(missing)}. " diff --git a/enterprise/backend/src/baserow_enterprise/assistant/tools/toolset.py b/enterprise/backend/src/baserow_enterprise/assistant/tools/toolset.py index f4e4497a4c..d424f1bef1 100644 --- a/enterprise/backend/src/baserow_enterprise/assistant/tools/toolset.py +++ b/enterprise/backend/src/baserow_enterprise/assistant/tools/toolset.py @@ -279,16 +279,12 @@ def _build_mode_tool_map() -> dict[AgentMode, frozenset[str]]: """ from .automation.tools import TOOL_FUNCTIONS as AUTO_FN - from .core.tools import create_builders, list_builders, switch_mode + from .builder.tools import TOOL_FUNCTIONS as BUILDER_FN + from .core.tools import create_builders, list_builders, switch_mode, update_builder from .database.tools import TOOL_FUNCTIONS as DB_FN from .navigation.tools import navigate from .search_user_docs.tools import search_user_docs - try: - from .builder.tools import TOOL_FUNCTIONS as BUILDER_FN - except ImportError: - BUILDER_FN = [] - n = frozenset # alias for readability def names(*funcs): @@ -303,9 +299,10 @@ def names(*funcs): ) return { - AgentMode.DATABASE: shared | names(*DB_FN, create_builders), - AgentMode.APPLICATION: shared | names(*BUILDER_FN, create_builders), - AgentMode.AUTOMATION: shared | names(*AUTO_FN, create_builders), + AgentMode.DATABASE: shared | names(*DB_FN, create_builders, update_builder), + AgentMode.APPLICATION: shared + | names(*BUILDER_FN, create_builders, update_builder), + AgentMode.AUTOMATION: shared | names(*AUTO_FN, create_builders, update_builder), AgentMode.EXPLAIN: shared | names( *[f for f in BUILDER_FN if f.__name__.startswith("list_")], @@ -371,7 +368,7 @@ async def call_tool( tool: ToolsetTool[AgentDepsT], ) -> Any: from baserow.core.exceptions import UserNotInWorkspace - from baserow_enterprise.assistant.tools.database.helpers import ToolInputError + from baserow_enterprise.assistant.tools.builder.helpers import ToolInputError try: return await self._inner.call_tool(name, tool_args, ctx, tool) diff --git a/enterprise/backend/src/baserow_enterprise/role/default_roles.py b/enterprise/backend/src/baserow_enterprise/role/default_roles.py index b9c2826576..90cf708275 100755 --- a/enterprise/backend/src/baserow_enterprise/role/default_roles.py +++ b/enterprise/backend/src/baserow_enterprise/role/default_roles.py @@ -165,11 +165,13 @@ DuplicateViewOperationType, ListAggregationsViewOperationType, ListViewDecorationOperationType, + ListViewFieldsOperationType, ListViewFilterOperationType, ListViewGroupByOperationType, ListViewsOperationType, ListViewSortOperationType, OrderViewsOperationType, + ReadAdjacentViewRowOperationType, ReadAggregationsViewOperationType, ReadViewDecorationOperationType, ReadViewFieldOptionsOperationType, @@ -350,20 +352,15 @@ ListTablesDatabaseTableOperationType, ReadApplicationOperationType, ReadDatabaseTableOperationType, - ListRowsDatabaseTableOperationType, ReadViewOperationType, - ReadFieldOperationType, ListViewSortOperationType, ReadViewFieldOptionsOperationType, ReadViewDecorationOperationType, ListViewDecorationOperationType, ListViewFilterOperationType, ListViewsOperationType, - ListFieldsOperationType, ListAggregationsViewOperationType, ReadAggregationsViewOperationType, - ReadAdjacentRowDatabaseRowOperationType, - ListRowNamesDatabaseTableOperationType, ReadViewFilterOperationType, ReadViewsOrderOperationType, ReadViewSortOperationType, @@ -376,11 +373,14 @@ ListWidgetsOperationType, ListDashboardDataSourcesOperationType, ReadDashboardDataSourceOperationType, + ListRowsDatabaseTableOperationType, ] ) default_roles[VIEWER_ROLE_UID].extend( default_roles[READ_ONLY_ROLE_UID] + [ + ListFieldsOperationType, + ReadFieldOperationType, ListenToAllRestrictedViewEventsOperationType, ListenToAllDatabaseTableEventsOperationType, ReadMCPEndpointOperationType, @@ -393,6 +393,10 @@ DispatchDashboardDataSourceOperationType, ReadDatabaseRowOperationType, ReadViewRowOperationType, + ListViewFieldsOperationType, + ReadAdjacentRowDatabaseRowOperationType, + ReadAdjacentViewRowOperationType, + ListRowNamesDatabaseTableOperationType, ] ) default_roles[COMMENTER_ROLE_UID].extend( diff --git a/enterprise/backend/src/baserow_enterprise/view_ownership_types.py b/enterprise/backend/src/baserow_enterprise/view_ownership_types.py index 619fba176d..8e0c7138b8 100644 --- a/enterprise/backend/src/baserow_enterprise/view_ownership_types.py +++ b/enterprise/backend/src/baserow_enterprise/view_ownership_types.py @@ -1,9 +1,18 @@ +from typing import Optional, Set + from django.contrib.auth.models import AbstractUser +from django.db.models import QuerySet from baserow.contrib.database.views.handler import ViewHandler from baserow.contrib.database.views.models import View -from baserow.contrib.database.views.operations import CreateViewFilterOperationType -from baserow.contrib.database.views.registries import ViewOwnershipType +from baserow.contrib.database.views.operations import ( + CreateViewFilterOperationType, + UpdateViewFieldOptionsOperationType, +) +from baserow.contrib.database.views.registries import ( + ViewOwnershipType, + view_type_registry, +) from baserow.core.exceptions import PermissionDenied from baserow.core.handler import CoreHandler from baserow.core.models import Workspace @@ -45,33 +54,102 @@ def enforce_apply_filters(self, user, view): raise_permission_exceptions=False, ) + def get_hidden_field_ids_for_user( + self, user: Optional[AbstractUser], view: View + ) -> Set[int]: + if user is None: + return set() + if CoreHandler().check_permissions( + user, + UpdateViewFieldOptionsOperationType.type, + workspace=view.table.database.workspace, + context=view, + raise_permission_exceptions=False, + ): + return set() + view_type = view_type_registry.get_by_model(view.specific_class) + return view_type.get_hidden_fields(view.specific) + def prepare_views_for_user(self, user, views): if len(views) == 0 or user is None: return views permission_checks = {} for view in views: - permission_checks[view.id] = PermissionCheck( + permission_checks[f"filter{view.id}"] = PermissionCheck( user, CreateViewFilterOperationType.type, context=view, ) + permission_checks[f"update_field_options{view.id}"] = PermissionCheck( + user, + UpdateViewFieldOptionsOperationType.type, + context=view, + ) check_results = CoreHandler().check_multiple_permissions( permission_checks.values(), workspace=views[0].table.database.workspace ) for view in views: - check_result = check_results[permission_checks[view.id]] + filter_check_result = check_results[permission_checks[f"filter{view.id}"]] # If the user does not have create view filter permissions for the provided # view, then the filters are omitted because the they're forcefully applied # so that the user can only see the rows that match the filter. - if not check_result: + if not filter_check_result: if not hasattr(view, "_prefetched_objects_cache"): view._prefetched_objects_cache = {} view._prefetched_objects_cache["viewfilter_set"] = [] view._prefetched_objects_cache["filter_groups"] = [] + field_options_check_result = check_results[ + permission_checks[f"update_field_options{view.id}"] + ] + # If the user does not have update field options permissions for the + # provided view, then the hidden fields are omitted because they should not + # be exposed to the user. + if not field_options_check_result: + if not hasattr(view, "_prefetched_objects_cache"): + view._prefetched_objects_cache = {} + # Cache hidden field IDs to avoid repeated permission checks. + view_type = view_type_registry.get_by_model(view.specific_class) + # This could cause N number of queries, but if the views are fetched + # using the `ViewHandler::list_views`, which is used when listing the + # views via the API, it won't be a problem because everything is then + # prefetched. + hidden_field_ids = view_type.get_hidden_fields(view.specific) + view._hidden_field_ids = hidden_field_ids + + # Remove sorts and group_bys that reference hidden fields so + # that editors don't see them in the API response. + if hidden_field_ids: + if "viewsort_set" not in view._prefetched_objects_cache: + view._prefetched_objects_cache["viewsort_set"] = list( + view.viewsort_set.all() + ) + view._prefetched_objects_cache["viewsort_set"] = [ + s + for s in view._prefetched_objects_cache["viewsort_set"] + if s.field_id not in hidden_field_ids + ] + + if "viewgroupby_set" not in view._prefetched_objects_cache: + view._prefetched_objects_cache["viewgroupby_set"] = list( + view.viewgroupby_set.all() + ) + view._prefetched_objects_cache["viewgroupby_set"] = [ + g + for g in view._prefetched_objects_cache["viewgroupby_set"] + if g.field_id not in hidden_field_ids + ] + + # Remove all decorations for editors because decorations may have + # conditions referencing hidden fields, which would cause errors on + # the frontend. + view._prefetched_objects_cache["viewdecoration_set"] = [] + else: + view._hidden_field_ids = None + return views def can_modify_rows(self, view, row_ids=None): @@ -88,3 +166,21 @@ def can_modify_rows(self, view, row_ids=None): id__in=rows_in_view ) return not rows_outside_view.exists() + + def enhance_list_fields_queryset( + self, user: AbstractUser, view: View, queryset: QuerySet + ) -> QuerySet: + if CoreHandler().check_permissions( + user, + UpdateViewFieldOptionsOperationType.type, + workspace=view.table.database.workspace, + context=view, + raise_permission_exceptions=False, + ): + return queryset + + view_type = view_type_registry.get_by_model(view.specific_class) + hidden_field_ids = view_type.get_hidden_fields(view.specific) + if hidden_field_ids: + return queryset.exclude(id__in=hidden_field_ids) + return queryset diff --git a/enterprise/backend/src/baserow_enterprise/ws/restricted_view/fields/signals.py b/enterprise/backend/src/baserow_enterprise/ws/restricted_view/fields/signals.py index d03c914d6b..5985622ef7 100644 --- a/enterprise/backend/src/baserow_enterprise/ws/restricted_view/fields/signals.py +++ b/enterprise/backend/src/baserow_enterprise/ws/restricted_view/fields/signals.py @@ -1,4 +1,4 @@ -from typing import Any, Dict +from typing import Any, Dict, Optional from django.contrib.auth.models import AbstractUser from django.db import transaction @@ -6,7 +6,9 @@ from baserow.contrib.database.fields import signals as field_signals from baserow.contrib.database.views.models import View +from baserow.contrib.database.views.registries import view_type_registry from baserow.contrib.database.ws.fields.signals import RealtimeFieldMessages +from baserow.core.db import specific_iterator from baserow.ws.registries import page_registry from baserow_enterprise.view_ownership_types import RestrictedViewOwnershipType @@ -15,18 +17,39 @@ def _broadcast_payload_to_all_restricted_views( user: AbstractUser, table_id: int, payload: Dict[str, Any], + field_id: Optional[int] = None, ): - views = View.objects.filter( + base_qs = View.objects.filter( table_id=table_id, ownership_type=RestrictedViewOwnershipType.type, - ).values_list("id", flat=True) + ) + + if field_id is not None: + # Batch-fetch all specific view subclasses in one query per type, + # using enhance_queryset to prefetch field options so that + # get_hidden_fields doesn't trigger N+1 queries. + views = specific_iterator( + base_qs.select_related("content_type").prefetch_related("table__field_set"), + per_content_type_queryset_hook=( + lambda model, queryset: view_type_registry.get_by_model( + model + ).enhance_queryset(queryset) + ), + ) + else: + views = base_qs view_page_type = page_registry.get("restricted_view") - for view_id in views: + for view in views: + if field_id is not None: + view_type = view_type_registry.get_by_model(view) + hidden_ids = view_type.get_hidden_fields(view) + if field_id in hidden_ids: + continue view_page_type.broadcast( payload, getattr(user, "web_socket_id", None), - restricted_view_id=view_id, + restricted_view_id=view.id, ) @@ -40,6 +63,7 @@ def field_created(sender, field, related_fields, user, **kwargs): field, related_fields, ), + field_id=field.id, ) ) @@ -54,6 +78,7 @@ def field_restored(sender, field, related_fields, user, **kwargs): field, related_fields, ), + field_id=field.id, ) ) @@ -68,6 +93,7 @@ def field_updated(sender, field, related_fields, user, **kwargs): field, related_fields, ), + field_id=field.id, ) ) @@ -85,5 +111,6 @@ def field_deleted( field_id, related_fields, ), + field_id=field_id, ) ) diff --git a/enterprise/backend/tests/baserow_enterprise_tests/assistant/evals/test_eval_builder.py b/enterprise/backend/tests/baserow_enterprise_tests/assistant/evals/test_eval_builder.py new file mode 100644 index 0000000000..9e4bf0bdc9 --- /dev/null +++ b/enterprise/backend/tests/baserow_enterprise_tests/assistant/evals/test_eval_builder.py @@ -0,0 +1,1198 @@ +import re + +import pytest + +from baserow.contrib.builder.data_sources.models import DataSource +from baserow.contrib.builder.elements.models import ( + Element, + MenuItemElement, +) +from baserow.contrib.builder.pages.models import Page +from baserow.contrib.builder.workflow_actions.models import BuilderWorkflowAction +from baserow_enterprise.assistant.types import ( + ApplicationUIContext, + UIContext, + UserUIContext, + WorkspaceUIContext, +) + +from .eval_utils import ( + EvalChecklist, + assert_tool_call_order, + count_tool_errors, + create_eval_assistant, + format_message_history, + print_message_history, +) + +# --------------------------------------------------------------------------- +# UI context helper +# --------------------------------------------------------------------------- + + +def build_builder_ui_context(user, workspace, builder, page=None) -> str: + ctx = UIContext( + workspace=WorkspaceUIContext(id=workspace.id, name=workspace.name), + application=ApplicationUIContext(id=str(builder.id), name=builder.name), + user=UserUIContext(id=user.id, name=user.first_name, email=user.email), + ) + return ctx.format() + + +# --------------------------------------------------------------------------- +# Prompts — one per test, all at the top for easy coverage scanning +# --------------------------------------------------------------------------- + +PROMPT_LIST_PAGES = "List all pages in builder '{builder_name}'." + +PROMPT_CREATE_LANDING_PAGE = ( + "In builder '{builder_name}', create a page called " + "'Home' at path '/'. Add a heading saying 'Welcome' and a text element " + "saying 'This is our landing page'. Also add a button labeled 'Get Started' " + "that links to '/contact'." +) + +PROMPT_CREATE_CONTACT_FORM = ( + "In builder '{builder_name}', create a page called " + "'Contact' at path '/contact'. Add a form container with text inputs " + "for Name and Email, and a submit button. " + "Add a create_row action on the form's submit event that creates a row " + "in table '{table_name}' mapping the Name and the Email." +) + +PROMPT_CREATE_DATA_SOURCE_PAGE = ( + "In builder '{builder_name}', create a page called " + "'Products' at path '/products'. Add a list_rows data source called " + "'All Products' that reads from table '{table_name}'. " + "Then add a repeat element using that data source and inside it " + "a heading element." +) + +PROMPT_SHARED_HEADER_WITH_MENU = ( + "In builder '{builder_name}', add a shared header with " + "a menu that links to all three pages: Home, About, " + "and Contact." +) + +PROMPT_BACK_BUTTON_ON_DETAIL = ( + "In builder '{builder_name}', add a 'Back to List' button " + "on the Detail page that navigates to the List page." +) + +PROMPT_BACK_LINK_ON_DETAIL = ( + "In builder '{builder_name}', add a 'Back to list' link " + "on the Detail page that goes to the List page." +) + +PROMPT_TABLE_WITH_EDIT_BUTTON = ( + "In builder '{builder_name}', create two pages: " + "a 'List' page at '/list' and an 'Edit' page at '/edit/:id'. " + "On the List page, add a list_rows data source for table '{table_name}', " + "then add a table element showing columns for {field_names}. " + "Add an Edit button that links to the Edit page, passing the row id." +) + +PROMPT_CREATE_LANDING_PAGE_WITH_EXISTING = ( + "Create a landing page with a heading, description, " + "and CTA button for my {builder_name}" +) + +PROMPT_FILTERED_DATA_SOURCE = ( + "In builder '{builder_name}', create a page called 'Pending Tasks' at " + "'/pending'. Show only tasks where Status is 'Pending' from the " + "'{table_name}' table in a table element with columns for Name and Status." +) + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _run_agent( + agent, deps, tracker, model, usage_limits, toolset, question, ui_context +): + deps.tool_helpers.request_context["ui_context"] = ui_context + + from baserow_enterprise.assistant.deps import AgentMode + + ctx = UIContext.model_validate_json(ui_context) + if ctx.application or ctx.page: + deps.mode = AgentMode.APPLICATION + elif ctx.automation or ctx.workflow: + deps.mode = AgentMode.AUTOMATION + else: + deps.mode = AgentMode.DATABASE + + return agent.run_sync( + user_prompt=question, + deps=deps, + model=model, + usage_limits=usage_limits, + toolsets=[toolset], + ) + + +def _filter_tool_calls(result, tool_names=None): + """Return assistant-side tool call entries, optionally filtered by name(s).""" + history = format_message_history(result) + calls = [e for e in history if e["role"] == "assistant" and "args" in e] + if tool_names is None: + return calls + if isinstance(tool_names, str): + tool_names = {tool_names} + else: + tool_names = set(tool_names) + return [e for e in calls if e.get("tool_name") in tool_names] + + +_ELEMENT_CREATION_TOOLS = { + "create_display_elements", + "create_layout_elements", + "create_form_elements", + "create_collection_elements", +} + + +def _collect_element_args(result, tool_names=None): + """Flatten all element dicts from element-creation tool calls.""" + tools = tool_names or _ELEMENT_CREATION_TOOLS + calls = _filter_tool_calls(result, tools) + elements = [] + for call in calls: + elements.extend(call["args"].get("elements", [])) + return elements + + +# --------------------------------------------------------------------------- +# Evals +# --------------------------------------------------------------------------- + + +@pytest.mark.eval +@pytest.mark.django_db(transaction=True) +def test_agent_lists_pages(data_fixture, eval_model): + """Agent should call list_pages when asked about builder pages.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application( + user=user, workspace=workspace, name="My App" + ) + data_fixture.create_builder_page(builder=builder, name="Home", path="/") + data_fixture.create_builder_page(builder=builder, name="About", path="/about") + + agent, deps, tracker, model, usage_limits, toolset = create_eval_assistant( + user, workspace, max_iters=10, model=eval_model + ) + ui_context = build_builder_ui_context(user, workspace, builder) + + result = _run_agent( + agent, + deps, + tracker, + model, + usage_limits, + toolset, + question=PROMPT_LIST_PAGES.format(builder_name=builder.name), + ui_context=ui_context, + ) + + print_message_history(result) + err_count, err_hint = count_tool_errors(result) + + history = format_message_history(result) + list_page_calls = _filter_tool_calls(result, "list_pages") + + with EvalChecklist("lists pages") as checks: + checks.check("no tool errors", err_count == 0, hint=err_hint) + checks.check( + "called list_pages", + len(list_page_calls) >= 1, + hint=f"tools called: {[e.get('tool_name') for e in history if e.get('tool_name')]}", + ) + checks.check( + "response mentions 'Home'", + "Home" in result.output, + hint=f"output: {result.output[:300]}", + ) + checks.check( + "response mentions 'About'", + "About" in result.output, + hint=f"output: {result.output[:300]}", + ) + + +@pytest.mark.eval +@pytest.mark.django_db(transaction=True) +def test_agent_creates_landing_page(data_fixture, eval_model): + """Agent should create a page with heading, text, and button elements.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application( + user=user, workspace=workspace, name="Website" + ) + + agent, deps, tracker, model, usage_limits, toolset = create_eval_assistant( + user, workspace, max_iters=20, model=eval_model + ) + ui_context = build_builder_ui_context(user, workspace, builder) + + result = _run_agent( + agent, + deps, + tracker, + model, + usage_limits, + toolset, + question=PROMPT_CREATE_LANDING_PAGE.format(builder_name=builder.name), + ui_context=ui_context, + ) + + print_message_history(result) + err_count, err_hint = count_tool_errors(result) + + # Pages must be created before elements — only enforce when no errors, because + # a failed early call (retry) would make first_B appear before last_A even though + # the model ultimately did it right. The EvalChecklist "no tool errors" check + # captures the retry case. + if err_count == 0: + assert_tool_call_order(result, ["create_pages", "create_display_elements"]) + + pages = Page.objects.filter(builder=builder, shared=False) + page = pages.first() + elements = Element.objects.filter(page=page) if page else Element.objects.none() + + all_el_args = _collect_element_args(result) + heading_args = [e for e in all_el_args if e.get("type") == "heading"] + button_args = [e for e in all_el_args if e.get("type") == "button"] + heading_texts = [str(e.get("value", "")).lower() for e in heading_args] + button_texts = [ + str(e.get("value", "") or e.get("label", "")).lower() for e in button_args + ] + + with EvalChecklist("creates landing page") as checks: + checks.check("no tool errors", err_count == 0, hint=err_hint) + checks.check("page created", pages.exists(), hint="no pages found in DB") + checks.check( + "page name is 'Home'", + page is not None and "home" in page.name.lower(), + hint=f"page name: {page.name if page else None}", + ) + checks.check( + "page path is '/'", + page is not None and page.path == "/", + hint=f"page path: {page.path if page else None}", + ) + checks.check( + ">=3 elements (heading, text, button)", + elements.count() >= 3, + hint=f"got {elements.count()} elements", + ) + checks.check( + "heading element with 'Welcome'", + any("welcome" in t for t in heading_texts), + hint=f"heading texts from args: {heading_texts}", + ) + checks.check( + "button labeled 'Get Started'", + any("get started" in t for t in button_texts), + hint=f"button texts from args: {button_texts}", + ) + + +@pytest.mark.eval +@pytest.mark.django_db(transaction=True) +def test_agent_creates_contact_form(data_fixture, eval_model): + """Agent should create a contact form page with form inputs and a + create_row action on submit.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application( + user=user, workspace=workspace, name="Contact App" + ) + database = data_fixture.create_database_application( + user=user, workspace=workspace, name="CRM" + ) + table = data_fixture.create_database_table( + user=user, database=database, name="Contacts" + ) + name_field = data_fixture.create_text_field(table=table, name="Name", primary=True) + email_field = data_fixture.create_email_field(table=table, name="Email") + + agent, deps, tracker, model, usage_limits, toolset = create_eval_assistant( + user, workspace, max_iters=25, model=eval_model + ) + ui_context = build_builder_ui_context(user, workspace, builder) + + result = _run_agent( + agent, + deps, + tracker, + model, + usage_limits, + toolset, + question=PROMPT_CREATE_CONTACT_FORM.format( + builder_name=builder.name, + table_name=table.name, + table_id=table.id, + name_field_id=name_field.id, + email_field_id=email_field.id, + ), + ui_context=ui_context, + ) + + print_message_history(result) + err_count, err_hint = count_tool_errors(result) + + # Pages → form elements → actions + assert_tool_call_order(result, ["setup_page"]) + + pages = Page.objects.filter(builder=builder, shared=False) + page = pages.first() + elements = Element.objects.filter(page=page) if page else Element.objects.none() + + actions = ( + BuilderWorkflowAction.objects.filter(page=page) + if page + else BuilderWorkflowAction.objects.none() + ) + create_row_action = actions.filter( + content_type__model="localbaserowcreaterowworkflowaction" + ).first() + + # Field mappings + service = None + mappings = {} + if create_row_action is not None: + service = create_row_action.specific.service.specific + mappings = { + m.field_id: m.value for m in service.field_mappings.filter(enabled=True) + } + + form_input_ids = set( + elements.filter( + content_type__model__in=["inputtextelement", "inputemailelement"] + ).values_list("id", flat=True) + ) + + form_data_re = re.compile(r"form_data\.(\d+)") + all_map_formulas_ok = ( + all( + bool({int(m) for m in form_data_re.findall(str(formula))} & form_input_ids) + for formula in mappings.values() + ) + if mappings and form_input_ids + else False + ) + + with EvalChecklist("creates contact form") as checks: + checks.check("no tool errors", err_count == 0, hint=err_hint) + checks.check("page created", pages.exists(), hint="no pages found in DB") + checks.check( + "page name is 'Contact'", + page is not None and "contact" in page.name.lower(), + hint=f"page name: {page.name if page else None}", + ) + checks.check( + "page path is '/contact'", + page is not None and page.path == "/contact", + hint=f"page path: {page.path if page else None}", + ) + checks.check( + ">=3 elements (form container + inputs)", + elements.count() >= 3, + hint=f"got {elements.count()} elements", + ) + checks.check( + "create_row workflow action exists", + create_row_action is not None, + hint=f"action types: {list(actions.values_list('content_type__model', flat=True))}", + ) + checks.check( + "create_row targets Contacts table", + service is not None and service.table_id == table.id, + hint=f"service table_id={service.table_id if service else None}, expected={table.id}", + ) + checks.check( + "Name field is mapped", + name_field.id in mappings, + hint=f"mapped field IDs: {set(mappings)}", + ) + checks.check( + "Email field is mapped", + email_field.id in mappings, + hint=f"mapped field IDs: {set(mappings)}", + ) + checks.check( + "all field mappings reference form input elements", + all_map_formulas_ok, + hint=f"formulas: {list(mappings.values())}, form input IDs: {form_input_ids}", + ) + + +@pytest.mark.eval +@pytest.mark.django_db(transaction=True) +def test_agent_creates_data_source_with_repeat(data_fixture, eval_model): + """Agent should create a page with a data source and a repeat element.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application( + user=user, workspace=workspace, name="Product Catalog" + ) + database = data_fixture.create_database_application( + user=user, workspace=workspace, name="Store" + ) + table = data_fixture.create_database_table( + user=user, database=database, name="Products" + ) + data_fixture.create_text_field(table=table, name="Name", primary=True) + data_fixture.create_number_field(table=table, name="Price") + + agent, deps, tracker, model, usage_limits, toolset = create_eval_assistant( + user, workspace, max_iters=25, model=eval_model + ) + ui_context = build_builder_ui_context(user, workspace, builder) + + result = _run_agent( + agent, + deps, + tracker, + model, + usage_limits, + toolset, + question=PROMPT_CREATE_DATA_SOURCE_PAGE.format( + builder_name=builder.name, + table_name=table.name, + table_id=table.id, + ), + ui_context=ui_context, + ) + + print_message_history(result) + err_count, err_hint = count_tool_errors(result) + + # Pages must be created before data setup. Accept either the low-level path + # (create_data_sources + create_collection_elements) or the high-level + # setup_page which handles both in one call. + if _filter_tool_calls(result, "setup_page"): + assert_tool_call_order(result, ["create_pages", "setup_page"]) + else: + assert_tool_call_order( + result, + ["create_pages", "create_data_sources", "create_collection_elements"], + ) + + pages = Page.objects.filter(builder=builder, shared=False) + page = pages.first() + + # Data source args — from create_data_sources or setup_page (both are valid) + ds_calls = _filter_tool_calls(result, "create_data_sources") + setup_calls = _filter_tool_calls(result, "setup_page") + if ds_calls: + data_sources = ds_calls[0]["args"].get("data_sources", []) + elif setup_calls: + data_sources = setup_calls[0]["args"].get("data_sources", []) or [] + else: + data_sources = [] + first_ds = data_sources[0] if data_sources else {} + ds_name = first_ds.get("name", "") + ds_table_id = first_ds.get("table_id") + ds_type = first_ds.get("type") + + # Element args — from individual tools or setup_page + all_el_args = _collect_element_args(result) + for call in setup_calls: + all_el_args.extend(call["args"].get("elements", []) or []) + repeat_elements = [e for e in all_el_args if e.get("type") == "repeat"] + + with EvalChecklist("creates data source with repeat") as checks: + checks.check("no tool errors", err_count == 0, hint=err_hint) + checks.check("page created", pages.exists(), hint="no pages found in DB") + checks.check( + "page name is 'Products'", + page is not None and "product" in page.name.lower(), + hint=f"page name: {page.name if page else None}", + ) + checks.check( + "page path is '/products'", + page is not None and page.path == "/products", + hint=f"page path: {page.path if page else None}", + ) + checks.check( + "data source created", + len(data_sources) >= 1, + hint=f"ds_calls: {len(ds_calls)}, setup_calls: {len(setup_calls)}", + ) + checks.check( + "data source type is list_rows", + ds_type == "list_rows", + hint=f"got type: {ds_type}", + ) + checks.check( + "data source named 'All Products'", + "all products" in ds_name.lower(), + hint=f"got name: '{ds_name}'", + ) + checks.check( + "data source table_id matches Products table", + ds_table_id == table.id, + hint=f"got table_id={ds_table_id}, expected={table.id}", + ) + checks.check( + "repeat element in args", + len(repeat_elements) >= 1, + hint=f"element types: {[e.get('type') for e in all_el_args]}", + ) + + +# --------------------------------------------------------------------------- +# Shared element evals +# --------------------------------------------------------------------------- + + +@pytest.mark.eval +@pytest.mark.django_db(transaction=True) +def test_agent_creates_header_with_menu(data_fixture, eval_model): + """Agent should create a header on the shared page with a menu linking to pages.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application( + user=user, workspace=workspace, name="Nav App" + ) + home = data_fixture.create_builder_page(builder=builder, name="Home", path="/") + about = data_fixture.create_builder_page( + builder=builder, name="About", path="/about" + ) + contact = data_fixture.create_builder_page( + builder=builder, name="Contact", path="/contact" + ) + + agent, deps, tracker, model, usage_limits, toolset = create_eval_assistant( + user, workspace, max_iters=25, model=eval_model + ) + ui_context = build_builder_ui_context(user, workspace, builder) + + result = _run_agent( + agent, + deps, + tracker, + model, + usage_limits, + toolset, + question=PROMPT_SHARED_HEADER_WITH_MENU.format( + builder_name=builder.name, + ), + ui_context=ui_context, + ) + + print_message_history(result) + err_count, err_hint = count_tool_errors(result) + + # Layout (header) must be created before display elements (menu) + assert_tool_call_order(result, ["create_layout_elements"]) + + shared_page = builder.shared_page + shared_elements = Element.objects.filter(page=shared_page) + header_elements = shared_elements.filter(content_type__model="headerelement") + menu_elements = shared_elements.filter(content_type__model="menuelement") + + menu_element = menu_elements.first().specific if menu_elements.exists() else None + menu_items = ( + MenuItemElement.objects.filter( + pk__in=menu_element.menu_items.values_list("pk", flat=True) + ).select_related("navigate_to_page") + if menu_element is not None + else MenuItemElement.objects.none() + ) + linked_page_ids = { + item.navigate_to_page_id + for item in menu_items + if item.navigate_to_page_id is not None + } + expected_page_ids = {home.id, about.id, contact.id} + + with EvalChecklist("creates header with menu") as checks: + checks.check("no tool errors", err_count == 0, hint=err_hint) + checks.check( + "header element on shared page", + header_elements.exists(), + hint=f"shared page elements: {list(shared_elements.values_list('content_type__model', flat=True))}", + ) + checks.check( + "menu element on shared page", + menu_elements.exists(), + hint="expected a menu element inside the header on the shared page", + ) + checks.check( + ">=3 menu items (Home, About, Contact)", + menu_items.count() >= 3, + hint=f"got {menu_items.count()} menu items", + ) + checks.check( + "menu links to Home page", + home.id in linked_page_ids, + hint=f"linked page IDs: {linked_page_ids}, expected Home={home.id}", + ) + checks.check( + "menu links to About page", + about.id in linked_page_ids, + hint=f"linked page IDs: {linked_page_ids}, expected About={about.id}", + ) + checks.check( + "menu links to Contact page", + contact.id in linked_page_ids, + hint=f"linked page IDs: {linked_page_ids}, expected Contact={contact.id}", + ) + + +@pytest.mark.eval +@pytest.mark.django_db(transaction=True) +def test_agent_puts_back_button_on_page_not_header(data_fixture, eval_model): + """Agent should place a back button on the page itself, not in the shared header.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application( + user=user, workspace=workspace, name="App" + ) + list_page = data_fixture.create_builder_page( + builder=builder, name="List", path="/list" + ) + detail_page = data_fixture.create_builder_page( + builder=builder, name="Detail", path="/detail" + ) + + agent, deps, tracker, model, usage_limits, toolset = create_eval_assistant( + user, workspace, max_iters=25, model=eval_model + ) + ui_context = build_builder_ui_context(user, workspace, builder) + + result = _run_agent( + agent, + deps, + tracker, + model, + usage_limits, + toolset, + question=PROMPT_BACK_BUTTON_ON_DETAIL.format( + builder_name=builder.name, + ), + ui_context=ui_context, + ) + + print_message_history(result) + err_count, err_hint = count_tool_errors(result) + + detail_elements = Element.objects.filter(page=detail_page) + shared_page = builder.shared_page + shared_elements = Element.objects.filter(page=shared_page) + + button_args = [ + e for e in _collect_element_args(result) if e.get("type") == "button" + ] + button_texts = [ + str(e.get("value", "") or e.get("label", "")).lower() for e in button_args + ] + + with EvalChecklist("back button on page not header") as checks: + checks.check("no tool errors", err_count == 0, hint=err_hint) + checks.check( + "called create_display_elements", + len(_filter_tool_calls(result, "create_display_elements")) >= 1, + hint=f"tools: {[e.get('tool_name') for e in format_message_history(result) if e.get('tool_name')]}", + ) + checks.check( + "elements exist on Detail page", + detail_elements.exists(), + hint="no elements on Detail page", + ) + checks.check( + "button labeled 'Back to List'", + any("back" in t for t in button_texts), + hint=f"button texts: {button_texts}", + ) + checks.check( + "no elements added to shared page", + not shared_elements.exists(), + hint=f"shared page has: {list(shared_elements.values_list('content_type__model', flat=True))}", + ) + + +@pytest.mark.eval +@pytest.mark.django_db(transaction=True) +def test_agent_creates_page_specific_nav_on_page(data_fixture, eval_model): + """Agent should create a 'Back to list' link on the page, not shared header.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application( + user=user, workspace=workspace, name="App" + ) + list_page = data_fixture.create_builder_page( + builder=builder, name="List", path="/list" + ) + detail_page = data_fixture.create_builder_page( + builder=builder, name="Detail", path="/detail" + ) + + agent, deps, tracker, model, usage_limits, toolset = create_eval_assistant( + user, workspace, max_iters=25, model=eval_model + ) + ui_context = build_builder_ui_context(user, workspace, builder) + + result = _run_agent( + agent, + deps, + tracker, + model, + usage_limits, + toolset, + question=PROMPT_BACK_LINK_ON_DETAIL.format( + builder_name=builder.name, + ), + ui_context=ui_context, + ) + + print_message_history(result) + err_count, err_hint = count_tool_errors(result) + + detail_elements = Element.objects.filter(page=detail_page) + shared_page = builder.shared_page + shared_elements = Element.objects.filter(page=shared_page) + + link_elements = detail_elements.filter(content_type__model="linkelement") + button_elements = detail_elements.filter(content_type__model="buttonelement") + menu_elements = detail_elements.filter(content_type__model="menuelement") + + # Navigation target checks for link element + link_targets_list = False + if link_elements.exists(): + link_el = link_elements.first().specific + link_targets_list = ( + link_el.navigate_to_page_id == list_page.id + or "/list" in str(link_el.navigate_to_url) + ) + + # Navigation target checks for menu element + menu_links_list = False + if menu_elements.exists(): + menu_element = menu_elements.first().specific + menu_items = MenuItemElement.objects.filter( + pk__in=menu_element.menu_items.values_list("pk", flat=True) + ) + linked_ids = { + item.navigate_to_page_id + for item in menu_items + if item.navigate_to_page_id is not None + } + menu_links_list = list_page.id in linked_ids + + has_nav_element = ( + link_elements.exists() or button_elements.exists() or menu_elements.exists() + ) + nav_targets_list_page = link_targets_list or menu_links_list + + with EvalChecklist("page-specific nav on page not header") as checks: + checks.check("no tool errors", err_count == 0, hint=err_hint) + checks.check( + "called create_display_elements", + len(_filter_tool_calls(result, "create_display_elements")) >= 1, + hint=f"tools: {[e.get('tool_name') for e in format_message_history(result) if e.get('tool_name')]}", + ) + checks.check( + "elements exist on Detail page", + detail_elements.exists(), + hint="no elements on Detail page", + ) + checks.check( + "link/button/menu element on Detail page", + has_nav_element, + hint=f"detail page elements: {list(detail_elements.values_list('content_type__model', flat=True))}", + ) + checks.check( + "nav element targets List page", + nav_targets_list_page, + hint=f"link_targets_list={link_targets_list}, menu_links_list={menu_links_list}", + ) + checks.check( + "no elements added to shared page", + not shared_elements.exists(), + hint=f"shared page has: {list(shared_elements.values_list('content_type__model', flat=True))}", + ) + + +# --------------------------------------------------------------------------- +# Table element with edit button eval +# --------------------------------------------------------------------------- + + +@pytest.mark.eval +@pytest.mark.django_db(transaction=True) +def test_agent_creates_table_with_edit_button(data_fixture, eval_model): + """Agent should create a list page with a table element showing columns + and an edit button that navigates to the edit page with the row id.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application( + user=user, workspace=workspace, name="Product App" + ) + database = data_fixture.create_database_application( + user=user, workspace=workspace, name="Store" + ) + table = data_fixture.create_database_table( + user=user, database=database, name="Products" + ) + name_field = data_fixture.create_text_field(table=table, name="Name", primary=True) + price_field = data_fixture.create_number_field(table=table, name="Price") + + agent, deps, tracker, model, usage_limits, toolset = create_eval_assistant( + user, workspace, max_iters=30, model=eval_model + ) + ui_context = build_builder_ui_context(user, workspace, builder) + + result = _run_agent( + agent, + deps, + tracker, + model, + usage_limits, + toolset, + question=PROMPT_TABLE_WITH_EDIT_BUTTON.format( + builder_name=builder.name, + table_name=table.name, + field_names="Name and Price", + ), + ui_context=ui_context, + ) + + print_message_history(result) + err_count, err_hint = count_tool_errors(result) + + pages = Page.objects.filter(builder=builder, shared=False) + list_page = pages.filter(name__icontains="List").first() + edit_page = pages.filter(name__icontains="Edit").first() + + list_elements = ( + Element.objects.filter(page=list_page) if list_page else Element.objects.none() + ) + table_elements = list_elements.filter(content_type__model="tableelement") + table_el = table_elements.first().specific if table_elements.exists() else None + + columns = table_el.fields.all().order_by("order") if table_el else [] + col_count = len(list(columns)) if table_el else 0 + + # Check data columns reference correct fields + field_id_re = re.compile(r"field_(\d+)") + referenced_field_ids = set() + link_columns = [] + if table_el: + for col in columns: + formula = str(getattr(col, "config", "") or "") + referenced_field_ids.update(int(m) for m in field_id_re.findall(formula)) + if getattr(col, "type", None) in ("link", "button"): + link_columns.append(col) + + name_col_ok = name_field.id in referenced_field_ids or any( + "Name" in (getattr(col, "name", "") or "") + for col in (columns if table_el else []) + ) + + # Edit button workflow action + action = None + if link_columns: + link_col = link_columns[0] + action = BuilderWorkflowAction.objects.filter( + page=list_page, event=f"{link_col.uid}_click", element=table_el + ).first() + + with EvalChecklist("creates table with edit button") as checks: + checks.check("no tool errors", err_count == 0, hint=err_hint) + checks.check( + "called setup_page or create_pages", + len(_filter_tool_calls(result, ["setup_page", "create_pages"])) >= 1, + hint=f"tools: {[e.get('tool_name') for e in format_message_history(result) if e.get('tool_name')]}", + ) + checks.check( + "List page created", + list_page is not None, + hint=f"pages: {list(pages.values_list('name', flat=True))}", + ) + checks.check( + "List page path is '/list'", + list_page is not None and list_page.path == "/list", + hint=f"list page path: {list_page.path if list_page else None}", + ) + checks.check( + "Edit page created", + edit_page is not None, + hint=f"pages: {list(pages.values_list('name', flat=True))}", + ) + checks.check( + "Edit page path contains '/edit'", + edit_page is not None and "/edit" in edit_page.path, + hint=f"edit page path: {edit_page.path if edit_page else None}", + ) + checks.check( + "table element on List page", + table_elements.exists(), + hint=f"list page elements: {list(list_elements.values_list('content_type__model', flat=True))}", + ) + checks.check( + ">=2 columns (Name, Price)", + col_count >= 2, + hint=f"got {col_count} columns", + ) + checks.check( + "Name field referenced in column config", + name_col_ok, + hint=f"referenced field IDs: {referenced_field_ids}, name_field.id={name_field.id}", + ) + checks.check( + "link/button column for 'Edit'", + len(link_columns) >= 1, + hint=f"column types: {[getattr(c, 'type', None) for c in columns]}", + ) + checks.check( + "edit button column is type 'button'", + any(getattr(c, "type", None) == "button" for c in link_columns), + hint=f"link column types: {[getattr(c, 'type', None) for c in link_columns]}", + ) + checks.check( + "edit button action navigates to Edit page", + action is not None and action.specific.navigate_to_page_id == edit_page.id, + hint=( + f"action={action}, navigate_to_page_id=" + f"{action.specific.navigate_to_page_id if action else None}, " + f"expected={edit_page.id if edit_page else None}" + ), + ) + + +# --------------------------------------------------------------------------- +# Filtered data source via view eval +# --------------------------------------------------------------------------- + + +@pytest.mark.eval +@pytest.mark.django_db(transaction=True) +def test_agent_creates_filtered_data_source_via_view(data_fixture, eval_model): + """Agent should switch to database mode to create a filtered view, then + switch back to application mode to create a data source referencing it. + + Scenario: Tasks table with a Status single_select field. User wants a page + showing only 'Pending' tasks. The agent should: + 1. switch_mode("database") + 2. create_views (grid view for the filter) + 3. create_view_filters (Status = Pending) + 4. switch_mode("application") + 5. create a data source with the view_id + """ + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + + database = data_fixture.create_database_application( + user=user, workspace=workspace, name="Project DB" + ) + table = data_fixture.create_database_table( + user=user, database=database, name="Tasks" + ) + data_fixture.create_text_field(table=table, name="Name", primary=True) + status_field = data_fixture.create_single_select_field(table=table, name="Status") + data_fixture.create_select_option( + field=status_field, value="Pending", color="light-orange" + ) + data_fixture.create_select_option( + field=status_field, value="Done", color="light-green" + ) + + builder = data_fixture.create_builder_application( + user=user, workspace=workspace, name="Task App" + ) + + agent, deps, tracker, model, usage_limits, toolset = create_eval_assistant( + user, workspace, max_iters=30, model=eval_model + ) + ui_context = build_builder_ui_context(user, workspace, builder) + + result = _run_agent( + agent, + deps, + tracker, + model, + usage_limits, + toolset, + question=PROMPT_FILTERED_DATA_SOURCE.format( + builder_name=builder.name, + table_name=table.name, + ), + ui_context=ui_context, + ) + + from baserow.contrib.database.views.models import View, ViewFilter + + print_message_history(result) + err_count, err_hint = count_tool_errors(result) + + # Check tool call sequence + switch_mode_calls = _filter_tool_calls(result, "switch_mode") + + switched_to_db = any(c["args"].get("mode") == "database" for c in switch_mode_calls) + switched_back_to_app = any( + c["args"].get("mode") == "application" for c in switch_mode_calls + ) + + # Verify DB state: view + filter created on the Tasks table + views = View.objects.filter(table=table) + view_filters = ViewFilter.objects.filter(view__table=table, field=status_field) + + # Verify DB state: data source service has a view FK set + pages = Page.objects.filter(builder=builder, shared=False) + data_sources = DataSource.objects.filter(page__builder=builder, page__shared=False) + ds_view_ids = [] + for ds in data_sources: + service = ds.service.specific if ds.service else None + if service and hasattr(service, "view_id") and service.view_id: + ds_view_ids.append(service.view_id) + + with EvalChecklist("filtered data source via view") as checks: + checks.check("no tool errors", err_count == 0, hint=err_hint) + checks.check( + "switched to database mode", + switched_to_db, + hint=f"switch_mode calls: {[c['args'] for c in switch_mode_calls]}", + ) + checks.check( + "view created on Tasks table", + views.exists(), + hint=f"views for table: {list(views.values_list('name', flat=True))}", + ) + checks.check( + "view filter on Status field", + view_filters.exists(), + hint=f"view_filters: {list(view_filters.values_list('field__name', 'value'))}", + ) + checks.check( + "switched back to application mode", + switched_back_to_app, + hint=f"switch_mode calls: {[c['args'] for c in switch_mode_calls]}", + ) + checks.check( + "page created", + pages.exists(), + hint=f"pages: {list(pages.values_list('name', flat=True))}", + ) + checks.check( + "data source in DB has view set", + len(ds_view_ids) >= 1, + hint=f"data source view_ids in DB: {ds_view_ids}", + ) + + +# --------------------------------------------------------------------------- +# New page vs modifying existing page eval +# --------------------------------------------------------------------------- + + +@pytest.mark.eval +@pytest.mark.django_db(transaction=True) +def test_agent_creates_new_page_not_modifies_existing(data_fixture, eval_model): + """Agent should create a NEW landing page, not add elements to an existing page. + + Scenario: Builder already has a Home page with some content. User asks to + "create a landing page". The agent should create a new page rather than + modifying the existing Home page. + """ + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application( + user=user, workspace=workspace, name="Back to Local" + ) + home_page = data_fixture.create_builder_page(builder=builder, name="Home", path="/") + # Pre-populate with existing content so the agent sees it's not empty + data_fixture.create_builder_heading_element(page=home_page, value="'Welcome Home'") + data_fixture.create_builder_text_element( + page=home_page, value="'Existing content on the home page.'" + ) + + agent, deps, tracker, model, usage_limits, toolset = create_eval_assistant( + user, workspace, max_iters=25, model=eval_model + ) + ui_context = build_builder_ui_context(user, workspace, builder) + + result = _run_agent( + agent, + deps, + tracker, + model, + usage_limits, + toolset, + question=PROMPT_CREATE_LANDING_PAGE_WITH_EXISTING.format( + builder_name=builder.name, + ), + ui_context=ui_context, + ) + + print_message_history(result) + err_count, err_hint = count_tool_errors(result) + + # Check that a new page was created (not just the existing Home) + pages = Page.objects.filter(builder=builder, shared=False) + new_pages = pages.exclude(id=home_page.id) + + # Check elements were added to the NEW page, not the existing Home + home_elements_after = Element.objects.filter(page=home_page) + new_page_elements = ( + Element.objects.filter(page=new_pages.first()) + if new_pages.exists() + else Element.objects.none() + ) + + # The home page started with 2 elements — if more were added, the agent + # modified it instead of creating a new page + home_element_count_before = 2 + home_was_modified = home_elements_after.count() > home_element_count_before + + # Check create_pages was called (not just setup_page on existing page) + create_page_calls = _filter_tool_calls(result, "create_pages") + setup_page_calls = _filter_tool_calls(result, "setup_page") + + # If setup_page was called, check it targeted a new page, not home_page + setup_targeted_home = any( + c["args"].get("page_id") == home_page.id for c in setup_page_calls + ) + + with EvalChecklist("creates new page not modifies existing") as checks: + checks.check("no tool errors", err_count == 0, hint=err_hint) + checks.check( + "called create_pages", + len(create_page_calls) >= 1, + hint=f"tools: {[e.get('tool_name') for e in format_message_history(result) if e.get('tool_name')]}", + ) + checks.check( + "new page exists in DB", + new_pages.exists(), + hint=f"all pages: {list(pages.values_list('name', flat=True))}", + ) + checks.check( + "new page has elements", + new_page_elements.count() >= 2, + hint=f"new page elements: {new_page_elements.count()}", + ) + checks.check( + "home page was NOT modified", + not home_was_modified, + hint=f"home page elements: {home_elements_after.count()} (started with {home_element_count_before})", + ) + checks.check( + "setup_page did NOT target existing Home page", + not setup_targeted_home, + hint=f"setup_page page_ids: {[c['args'].get('page_id') for c in setup_page_calls]}", + ) diff --git a/enterprise/backend/tests/baserow_enterprise_tests/assistant/evals/test_eval_builder_proactive.py b/enterprise/backend/tests/baserow_enterprise_tests/assistant/evals/test_eval_builder_proactive.py new file mode 100644 index 0000000000..efddf4e89a --- /dev/null +++ b/enterprise/backend/tests/baserow_enterprise_tests/assistant/evals/test_eval_builder_proactive.py @@ -0,0 +1,302 @@ +""" +Eval: the agent should ask the user when implied resources don't exist. + +When the user says "create an app showing projects", the agent should look for +a "projects" table, and if none exists, ask the user which table to use rather +than creating a new table and building everything on top of it. + +When a matching table IS found the agent should proceed to build the app. + +Run with: pytest -m eval -k test_eval_builder_proactive -v -s +""" + +import pytest + +from baserow.contrib.builder.pages.models import Page +from baserow_enterprise.assistant.deps import AgentMode +from baserow_enterprise.assistant.types import ( + ApplicationUIContext, + UIContext, + UserUIContext, + WorkspaceUIContext, +) + +from .eval_utils import ( + EvalChecklist, + count_tool_errors, + create_eval_assistant, + format_message_history, + print_message_history, +) + +# --------------------------------------------------------------------------- +# Eval prompts — one per test, easy to scan for coverage +# --------------------------------------------------------------------------- + +PROMPT_CREATE_PROJECTS_APP = ( + "Create an app showing projects in a list with cards showing " + "project name and status." +) + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _build_builder_ui_context(user, workspace, builder=None) -> str: + ctx = UIContext( + workspace=WorkspaceUIContext(id=workspace.id, name=workspace.name), + application=ApplicationUIContext(id=str(builder.id), name=builder.name) + if builder + else None, + user=UserUIContext(id=user.id, name=user.first_name, email=user.email), + ) + return ctx.format() + + +def _run_agent( + agent, deps, tracker, model, usage_limits, toolset, question, ui_context +): + deps.tool_helpers.request_context["ui_context"] = ui_context + + ctx = UIContext.model_validate_json(ui_context) + if ctx.application or ctx.page: + deps.mode = AgentMode.APPLICATION + elif ctx.automation or ctx.workflow: + deps.mode = AgentMode.AUTOMATION + else: + deps.mode = AgentMode.DATABASE + + return agent.run_sync( + user_prompt=question, + deps=deps, + model=model, + usage_limits=usage_limits, + toolsets=[toolset], + ) + + +def _get_tool_calls(result, tool_name): + history = format_message_history(result) + return [ + e + for e in history + if e["role"] == "assistant" and e.get("tool_name") == tool_name and "args" in e + ] + + +# --------------------------------------------------------------------------- +# Evals +# --------------------------------------------------------------------------- + + +@pytest.mark.eval +@pytest.mark.django_db(transaction=True) +def test_agent_asks_when_implied_table_missing(data_fixture, eval_model): + """ + Agent should NOT create a table when the user's request implies one exists. + + Scenario: workspace has an "Invoices" table but no "Projects" table. + Prompt: "create an app showing projects in a list". + Expected: agent calls list_tables, finds no match, and asks the user. + Not expected: agent calls create_tables to make a "Projects" table. + """ + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + + # Create an unrelated table so list_tables returns something meaningful + database = data_fixture.create_database_application( + user=user, workspace=workspace, name="Finance" + ) + table = data_fixture.create_database_table( + user=user, database=database, name="Invoices" + ) + data_fixture.create_text_field(table=table, name="Invoice Number", primary=True) + + # Provide a builder context so the agent starts in APPLICATION mode + builder = data_fixture.create_builder_application( + user=user, workspace=workspace, name="My App" + ) + + agent, deps, tracker, model, usage_limits, toolset = create_eval_assistant( + user, workspace, max_iters=15, model=eval_model + ) + ui_context = _build_builder_ui_context(user, workspace, builder) + + result = _run_agent( + agent, + deps, + tracker, + model, + usage_limits, + toolset, + question=PROMPT_CREATE_PROJECTS_APP, + ui_context=ui_context, + ) + + print_message_history(result) + err_count, err_hint = count_tool_errors(result) + + history = format_message_history(result) + create_table_calls = _get_tool_calls(result, "create_tables") + list_table_calls = _get_tool_calls(result, "list_tables") + create_page_calls = _get_tool_calls(result, "create_pages") + setup_page_calls = _get_tool_calls(result, "setup_page") + + last_assistant_entries = [e for e in history if e["role"] == "assistant"] + last_assistant = last_assistant_entries[-1] if last_assistant_entries else {} + final_text = last_assistant.get("content", "") + + with EvalChecklist("asks when implied table missing") as checks: + checks.check("no tool errors", err_count == 0, hint=err_hint) + checks.check( + "called list_tables to search for 'projects'", + len(list_table_calls) >= 1, + hint=f"tools called: {[e.get('tool_name') for e in history if e.get('tool_name')]}", + ) + checks.check( + "did NOT call create_tables", + len(create_table_calls) == 0, + hint=f"create_tables args: {[c.get('args') for c in create_table_calls]}", + ) + checks.check( + "did NOT create app pages (no matching table found)", + len(create_page_calls) + len(setup_page_calls) == 0, + hint=f"create_pages/setup_page args: {[c.get('args') for c in create_page_calls + setup_page_calls]}", + ) + checks.check( + "agent ended with a text response (asked the user)", + last_assistant.get("type") == "TextPart", + hint=f"last assistant entry type: {last_assistant.get('type')}", + ) + checks.check( + "response asks about projects or requests clarification", + any( + kw in final_text.lower() + for kw in ( + "project", + "which table", + "clarif", + "don't see", + "no table", + "exist", + "could you", + "please", + ) + ), + hint=f"response: {final_text[:300]}", + ) + + +@pytest.mark.eval +@pytest.mark.django_db(transaction=True) +def test_agent_creates_app_when_table_exists(data_fixture, eval_model): + """ + When a matching 'Projects' table exists the agent should build the app + without asking for clarification. + + Expected: + - does NOT call create_tables (reuses existing) + - creates a page + - creates a data source pointing to the Projects table + - creates at least one collection or display element + """ + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + + database = data_fixture.create_database_application( + user=user, workspace=workspace, name="Work" + ) + projects_table = data_fixture.create_database_table( + user=user, database=database, name="Projects" + ) + data_fixture.create_text_field(table=projects_table, name="Name", primary=True) + data_fixture.create_text_field(table=projects_table, name="Status") + + builder = data_fixture.create_builder_application( + user=user, workspace=workspace, name="Project Tracker" + ) + + agent, deps, tracker, model, usage_limits, toolset = create_eval_assistant( + user, workspace, max_iters=25, model=eval_model + ) + ui_context = _build_builder_ui_context(user, workspace, builder) + + result = _run_agent( + agent, + deps, + tracker, + model, + usage_limits, + toolset, + question=PROMPT_CREATE_PROJECTS_APP, + ui_context=ui_context, + ) + + print_message_history(result) + err_count, err_hint = count_tool_errors(result) + + history = format_message_history(result) + create_table_calls = _get_tool_calls(result, "create_tables") + create_page_calls = _get_tool_calls(result, "create_pages") + setup_page_calls = _get_tool_calls(result, "setup_page") + ds_calls = _get_tool_calls(result, "create_data_sources") + + pages = Page.objects.filter(builder=builder, shared=False) + + # Collect data source table_ids from args + ds_table_ids = [] + for call in ds_calls: + for ds in call.get("args", {}).get("data_sources", []): + if ds.get("table_id"): + ds_table_ids.append(ds["table_id"]) + + # Collect all element types created + _ELEMENT_TOOLS = { + "create_display_elements", + "create_collection_elements", + "create_layout_elements", + "create_form_elements", + } + el_calls = [ + e + for e in history + if e["role"] == "assistant" + and e.get("tool_name") in _ELEMENT_TOOLS + and "args" in e + ] + all_element_types = [] + for call in el_calls: + all_element_types.extend( + e.get("type") for e in call.get("args", {}).get("elements", []) + ) + + with EvalChecklist("creates app when projects table exists") as checks: + checks.check("no tool errors", err_count == 0, hint=err_hint) + checks.check( + "did NOT call create_tables (used existing Projects table)", + len(create_table_calls) == 0, + hint=f"create_tables args: {[c.get('args') for c in create_table_calls]}", + ) + checks.check( + "created at least one page", + len(create_page_calls) + len(setup_page_calls) >= 1, + hint=f"tools called: {[e.get('tool_name') for e in history if e.get('tool_name')]}", + ) + checks.check( + "page exists in DB", + pages.exists(), + hint=f"pages: {list(pages.values_list('name', flat=True))}", + ) + checks.check( + "data source targets Projects table", + projects_table.id in ds_table_ids, + hint=f"data source table_ids: {ds_table_ids}, expected: {projects_table.id}", + ) + checks.check( + "at least one element created", + len(all_element_types) >= 1, + hint=f"element tools called: {[c.get('tool_name') for c in el_calls]}", + ) diff --git a/enterprise/backend/tests/baserow_enterprise_tests/assistant/evals/test_eval_builder_user_source.py b/enterprise/backend/tests/baserow_enterprise_tests/assistant/evals/test_eval_builder_user_source.py new file mode 100644 index 0000000000..7547307e41 --- /dev/null +++ b/enterprise/backend/tests/baserow_enterprise_tests/assistant/evals/test_eval_builder_user_source.py @@ -0,0 +1,211 @@ +import pytest + +from baserow.core.user_sources.handler import UserSourceHandler +from baserow_enterprise.assistant.types import ( + ApplicationUIContext, + UIContext, + UserUIContext, + WorkspaceUIContext, +) + +from .eval_utils import ( + EvalChecklist, + count_tool_errors, + create_eval_assistant, + format_message_history, + print_message_history, +) + +# --------------------------------------------------------------------------- +# UI context helper +# --------------------------------------------------------------------------- + + +def build_builder_ui_context(user, workspace, builder) -> str: + ctx = UIContext( + workspace=WorkspaceUIContext(id=workspace.id, name=workspace.name), + application=ApplicationUIContext(id=str(builder.id), name=builder.name), + user=UserUIContext(id=user.id, name=user.first_name, email=user.email), + ) + return ctx.format() + + +# --------------------------------------------------------------------------- +# Prompts +# --------------------------------------------------------------------------- + +PROMPT_NEW_TABLE = ( + "In builder '{builder_name}', set up a user source called 'App Users' " + "so users can log in with roles: Admin and Viewer." +) + +PROMPT_EXISTING_TABLE = ( + "In builder '{builder_name}', set up a user source called 'Members' " + "using the existing table '{table_name}'." +) + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _run_agent( + agent, deps, tracker, model, usage_limits, toolset, question, ui_context +): + deps.tool_helpers.request_context["ui_context"] = ui_context + + from baserow_enterprise.assistant.deps import AgentMode + + deps.mode = AgentMode.APPLICATION + + return agent.run_sync( + user_prompt=question, + deps=deps, + model=model, + usage_limits=usage_limits, + toolsets=[toolset], + ) + + +def _filter_tool_calls(result, tool_names): + history = format_message_history(result) + calls = [e for e in history if e["role"] == "assistant" and "args" in e] + if isinstance(tool_names, str): + tool_names = {tool_names} + else: + tool_names = set(tool_names) + return [e for e in calls if e.get("tool_name") in tool_names] + + +# --------------------------------------------------------------------------- +# Evals +# --------------------------------------------------------------------------- + + +@pytest.mark.eval +@pytest.mark.django_db(transaction=True) +def test_eval_setup_user_source_new_table(data_fixture, eval_model): + """Agent creates a user source with a brand-new users table.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application( + user=user, workspace=workspace, name="My App" + ) + database = data_fixture.create_database_application( + user=user, workspace=workspace, name="My DB" + ) + + agent, deps, tracker, model, usage_limits, toolset = create_eval_assistant( + user, workspace, max_iters=15, model=eval_model + ) + ui_context = build_builder_ui_context(user, workspace, builder) + + result = _run_agent( + agent, + deps, + tracker, + model, + usage_limits, + toolset, + question=PROMPT_NEW_TABLE.format( + builder_name=builder.name, database_name=database.name + ), + ui_context=ui_context, + ) + + print_message_history(result) + err_count, err_hint = count_tool_errors(result) + + setup_calls = _filter_tool_calls(result, "setup_user_source") + user_sources = UserSourceHandler().get_user_sources(builder) + + with EvalChecklist("user source new table") as checks: + checks.check("no tool errors", err_count == 0, hint=err_hint) + checks.check( + "called setup_user_source", + len(setup_calls) >= 1, + hint=f"calls: {[e.get('tool_name') for e in format_message_history(result) if e.get('tool_name')]}", + ) + checks.check( + "user source created", + len(user_sources) >= 1, + hint=f"found {len(user_sources)} user sources", + ) + if user_sources: + us = user_sources[0] + roles = us.get_type().get_roles(us) + checks.check( + "has Admin role", + "Admin" in roles, + hint=f"roles: {roles}", + ) + + +@pytest.mark.eval +@pytest.mark.django_db(transaction=True) +def test_eval_setup_user_source_existing_table(data_fixture, eval_model): + """Agent creates a user source using an existing table.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application( + user=user, workspace=workspace, name="My App" + ) + database = data_fixture.create_database_application( + user=user, workspace=workspace, name="My DB" + ) + table = data_fixture.create_database_table( + database=database, name="Members", user=user + ) + data_fixture.create_text_field(table=table, name="Name", primary=True) + data_fixture.create_email_field(table=table, name="Email") + data_fixture.create_password_field(table=table, name="Password") + data_fixture.create_single_select_field(table=table, name="Role") + + agent, deps, tracker, model, usage_limits, toolset = create_eval_assistant( + user, workspace, max_iters=15, model=eval_model + ) + ui_context = build_builder_ui_context(user, workspace, builder) + + result = _run_agent( + agent, + deps, + tracker, + model, + usage_limits, + toolset, + question=PROMPT_EXISTING_TABLE.format( + builder_name=builder.name, + table_name=table.name, + table_id=table.id, + database_name=database.name, + ), + ui_context=ui_context, + ) + + print_message_history(result) + err_count, err_hint = count_tool_errors(result) + + setup_calls = _filter_tool_calls(result, "setup_user_source") + user_sources = UserSourceHandler().get_user_sources(builder) + + with EvalChecklist("user source existing table") as checks: + checks.check("no tool errors", err_count == 0, hint=err_hint) + checks.check( + "called setup_user_source", + len(setup_calls) >= 1, + hint=f"calls: {[e.get('tool_name') for e in format_message_history(result) if e.get('tool_name')]}", + ) + checks.check( + "user source created", + len(user_sources) >= 1, + hint=f"found {len(user_sources)} user sources", + ) + if user_sources: + us = user_sources[0] + checks.check( + "uses correct table", + us.specific.table_id == table.id, + hint=f"expected table {table.id}, got {us.specific.table_id}", + ) diff --git a/enterprise/backend/tests/baserow_enterprise_tests/assistant/test_assistant_builder_element_move_tools.py b/enterprise/backend/tests/baserow_enterprise_tests/assistant/test_assistant_builder_element_move_tools.py new file mode 100644 index 0000000000..75f3be3bd9 --- /dev/null +++ b/enterprise/backend/tests/baserow_enterprise_tests/assistant/test_assistant_builder_element_move_tools.py @@ -0,0 +1,221 @@ +""" +Unit tests for the builder assistant move_elements tool. +""" + +import pytest + +from baserow.contrib.builder.elements.handler import ElementHandler +from baserow_enterprise.assistant.tools.builder.tools import ( + create_display_elements, + create_layout_elements, + move_elements, +) +from baserow_enterprise.assistant.tools.builder.types import ( + DisplayElementCreate, + ElementMove, + LayoutElementCreate, +) + +from .utils import create_fake_tool_helpers, make_test_ctx + + +@pytest.fixture(autouse=True) +def mock_formula_generators(monkeypatch): + """Mock all formula generation to avoid LLM requirement in tests.""" + + def noop(*args, **kwargs): + return [] + + monkeypatch.setattr( + "baserow_enterprise.assistant.tools.builder.agents.update_element_formulas", + noop, + ) + monkeypatch.setattr( + "baserow_enterprise.assistant.tools.builder.agents.update_data_source_formulas", + noop, + ) + monkeypatch.setattr( + "baserow_enterprise.assistant.tools.builder.agents.update_workflow_action_formulas", + noop, + ) + monkeypatch.setattr( + "baserow_enterprise.assistant.tools.builder.agents.update_single_element_formulas", + noop, + ) + monkeypatch.setattr( + "baserow_enterprise.assistant.tools.builder.agents.update_single_data_source_formulas", + noop, + ) + + +def _create_two_headings(data_fixture): + """Helper: create a page with two heading elements, return (ctx, page, id1, id2).""" + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate(ref="h1", type="heading", value="First", level=1), + DisplayElementCreate(ref="h2", type="heading", value="Second", level=2), + ], + thought="test", + ) + + id1 = result["ref_to_id_map"]["h1"] + id2 = result["ref_to_id_map"]["h2"] + return ctx, page, id1, id2 + + +@pytest.mark.django_db(transaction=True) +def test_move_element_before_another(data_fixture): + ctx, page, id1, id2 = _create_two_headings(data_fixture) + + # Move h2 before h1 + result = move_elements( + ctx, + page_id=page.id, + moves=[ElementMove(element_id=id2, before_id=id1)], + thought="reorder", + ) + + assert len(result["moved_elements"]) == 1 + assert result["moved_elements"][0]["element_id"] == id2 + assert "errors" not in result + + # Verify order: h2 should now come before h1 + elements = list(ElementHandler().get_elements(page)) + ids_in_order = [e.id for e in elements] + assert ids_in_order.index(id2) < ids_in_order.index(id1) + + +@pytest.mark.django_db(transaction=True) +def test_move_element_to_end(data_fixture): + ctx, page, id1, id2 = _create_two_headings(data_fixture) + + # Move h1 to end (before_id=None) + result = move_elements( + ctx, + page_id=page.id, + moves=[ElementMove(element_id=id1, before_id=None)], + thought="move to end", + ) + + assert len(result["moved_elements"]) == 1 + assert result["moved_elements"][0]["element_id"] == id1 + + # h1 should now be after h2 + elements = list(ElementHandler().get_elements(page)) + ids_in_order = [e.id for e in elements] + assert ids_in_order.index(id1) > ids_in_order.index(id2) + + +@pytest.mark.django_db(transaction=True) +def test_move_element_into_container(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + # Create a column container + layout_result = create_layout_elements( + ctx, + page_id=page.id, + elements=[LayoutElementCreate(ref="cols", type="column", column_amount=2)], + thought="test", + ) + col_id = layout_result["ref_to_id_map"]["cols"] + + # Create a heading at root level + display_result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate(ref="h1", type="heading", value="Hello", level=1), + ], + thought="test", + ) + h1_id = display_result["ref_to_id_map"]["h1"] + + # Move heading into column container, slot "1" + result = move_elements( + ctx, + page_id=page.id, + moves=[ + ElementMove( + element_id=h1_id, + parent_element_id=col_id, + place_in_container="1", + ) + ], + thought="move into container", + ) + + assert len(result["moved_elements"]) == 1 + moved = result["moved_elements"][0] + assert moved["element_id"] == h1_id + assert moved["parent_element_id"] == col_id + assert moved["place_in_container"] == "1" + + +@pytest.mark.django_db(transaction=True) +def test_move_element_to_root(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + # Create column + child heading inside it + layout_result = create_layout_elements( + ctx, + page_id=page.id, + elements=[LayoutElementCreate(ref="cols", type="column", column_amount=2)], + thought="test", + ) + col_id = layout_result["ref_to_id_map"]["cols"] + + display_result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate( + ref="h1", + type="heading", + value="Inside", + level=1, + parent_element="cols", + place_in_container="0", + ), + ], + thought="test", + ) + h1_id = display_result["ref_to_id_map"]["h1"] + + # Verify it's inside the container + el = ElementHandler().get_element(h1_id) + assert el.parent_element_id == col_id + + # Move it to root (parent_element_id=None) + result = move_elements( + ctx, + page_id=page.id, + moves=[ElementMove(element_id=h1_id, parent_element_id=None)], + thought="move to root", + ) + + assert len(result["moved_elements"]) == 1 + moved = result["moved_elements"][0] + assert moved["element_id"] == h1_id + assert moved["parent_element_id"] is None diff --git a/enterprise/backend/tests/baserow_enterprise_tests/assistant/test_assistant_builder_tools.py b/enterprise/backend/tests/baserow_enterprise_tests/assistant/test_assistant_builder_tools.py new file mode 100644 index 0000000000..0e227cf7e8 --- /dev/null +++ b/enterprise/backend/tests/baserow_enterprise_tests/assistant/test_assistant_builder_tools.py @@ -0,0 +1,2463 @@ +""" +Unit tests for the builder assistant tools. + +Tests cover pages, data sources, elements, and workflow actions using +the RunContext + FunctionToolset pattern. +""" + +import pytest + +from baserow_enterprise.assistant.tools.builder.tools import ( + create_actions, + create_collection_elements, + create_data_sources, + create_display_elements, + create_form_elements, + create_layout_elements, + create_pages, + list_actions, + list_data_sources, + list_elements, + list_pages, + update_data_source, + update_element, + update_element_style, + update_page, +) +from baserow_enterprise.assistant.tools.builder.types import ( + ActionCreate, + ButtonStyleOverride, + CollectionElementCreate, + DataSourceCreate, + DataSourceSort, + DataSourceUpdate, + DisplayElementCreate, + ElementStyleUpdate, + ElementUpdate, + FormElementCreate, + InputStyleOverride, + LayoutElementCreate, + LinkStyleOverride, + MenuItemCreate, + PageCreate, + PagePathParam, + PageUpdate, + TableFieldConfig, + TypographyStyleOverride, +) +from baserow_enterprise.assistant.tools.shared.formula_utils import ( + formula_desc, + literal_or_placeholder, + needs_formula, +) + +from .utils import create_fake_tool_helpers, make_test_ctx + + +@pytest.fixture(autouse=True) +def mock_formula_generators(monkeypatch): + """Mock all formula generation to avoid LLM requirement in tests.""" + + def noop(*args, **kwargs): + return [] + + monkeypatch.setattr( + "baserow_enterprise.assistant.tools.builder.agents.update_element_formulas", + noop, + ) + monkeypatch.setattr( + "baserow_enterprise.assistant.tools.builder.agents.update_data_source_formulas", + noop, + ) + monkeypatch.setattr( + "baserow_enterprise.assistant.tools.builder.agents.update_workflow_action_formulas", + noop, + ) + monkeypatch.setattr( + "baserow_enterprise.assistant.tools.builder.agents.update_single_element_formulas", + noop, + ) + monkeypatch.setattr( + "baserow_enterprise.assistant.tools.builder.agents.update_single_data_source_formulas", + noop, + ) + + +# =========================================================================== +# Formula utils tests +# =========================================================================== + + +class TestFormulaUtils: + def test_needs_formula_with_prefix(self): + assert needs_formula("$formula: the product name") + assert needs_formula(" $formula: upper case test ") + + def test_needs_formula_with_raw_get(self): + assert needs_formula("get('page_parameter.id')") + assert needs_formula("concat('hello', ' ', get('user.name'))") + + def test_needs_formula_with_raw_expressions(self): + assert needs_formula("if(get('user.is_authenticated'), 'yes', 'no')") + assert needs_formula("today()") + assert needs_formula("now()") + + def test_needs_formula_with_literal(self): + assert not needs_formula("Submit") + assert not needs_formula("'Hello world'") + assert not needs_formula(None) + assert not needs_formula("") + + def test_formula_desc_strips_prefix(self): + assert formula_desc("$formula: the product name") == "the product name" + assert formula_desc(" $formula: spaced ") == "spaced" + + def test_formula_desc_passes_raw(self): + assert formula_desc("get('page_parameter.id')") == "get('page_parameter.id')" + + def test_literal_or_placeholder_formula(self): + assert literal_or_placeholder("$formula: something") == "''" + assert literal_or_placeholder("get('field')") == "''" + + def test_literal_or_placeholder_literal(self): + assert literal_or_placeholder("Submit") == "'Submit'" + assert literal_or_placeholder(None) == "''" + + +# =========================================================================== +# Page tools tests +# =========================================================================== + + +@pytest.mark.django_db +def test_list_pages(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + ctx = make_test_ctx(user, workspace) + result = list_pages(ctx, application_id=builder.id, thought="test") + + assert len(result["pages"]) == 1 + assert result["pages"][0]["name"] == "Home" + assert result["pages"][0]["id"] == page.id + + +@pytest.mark.django_db(transaction=True) +def test_create_pages(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + + ctx = make_test_ctx(user, workspace) + result = create_pages( + ctx, + application_id=builder.id, + pages=[ + PageCreate(name="Home", path="/"), + PageCreate( + name="Product Detail", + path="/products/:id", + path_params=[PagePathParam(name="id", type="numeric")], + ), + ], + thought="test", + ) + + assert len(result["created_pages"]) == 2 + assert result["created_pages"][0]["name"] == "Home" + assert result["created_pages"][1]["name"] == "Product Detail" + assert result["created_pages"][1]["path"] == "/products/:id" + + +@pytest.mark.django_db(transaction=True) +def test_create_pages_skips_duplicates(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + ctx = make_test_ctx(user, workspace) + result = create_pages( + ctx, + application_id=builder.id, + pages=[ + PageCreate(name="Home", path="/"), + PageCreate(name="About", path="/about"), + ], + thought="test", + ) + + assert len(result["created_pages"]) == 1 + assert result["created_pages"][0]["name"] == "About" + assert len(result["existing_pages"]) == 1 + + +# =========================================================================== +# Data source tools tests +# =========================================================================== + + +@pytest.mark.django_db(transaction=True) +def test_create_list_rows_data_source(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + database = data_fixture.create_database_application(user=user, workspace=workspace) + table = data_fixture.create_database_table(user=user, database=database) + field = data_fixture.create_text_field(table=table, name="Name") + + ctx = make_test_ctx(user, workspace) + result = create_data_sources( + ctx, + page_id=page.id, + data_sources=[ + DataSourceCreate( + ref="products_ds", + name="Products", + type="list_rows", + table_id=table.id, + sortings=[DataSourceSort(field_id=field.id)], + ), + ], + thought="test", + ) + + assert len(result["created_data_sources"]) == 1 + assert result["created_data_sources"][0]["name"] == "Products" + assert result["created_data_sources"][0]["type"] == "list_rows" + assert "products_ds" in result["ref_to_id_map"] + + +@pytest.mark.django_db(transaction=True) +def test_create_get_row_data_source(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page( + builder=builder, name="Detail", path="/detail/:id" + ) + database = data_fixture.create_database_application(user=user, workspace=workspace) + table = data_fixture.create_database_table(user=user, database=database) + + ctx = make_test_ctx(user, workspace) + result = create_data_sources( + ctx, + page_id=page.id, + data_sources=[ + DataSourceCreate( + ref="product_ds", + name="Product", + type="get_row", + table_id=table.id, + row_id="1", + ), + ], + thought="test", + ) + + assert len(result["created_data_sources"]) == 1 + assert result["created_data_sources"][0]["type"] == "get_row" + + +@pytest.mark.django_db +def test_list_data_sources(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + ctx = make_test_ctx(user, workspace) + result = list_data_sources(ctx, page_id=page.id, thought="test") + + assert result["data_sources"] == [] + + +def test_data_source_validation_errors(): + """get_row type requires row_id.""" + with pytest.raises(Exception): + DataSourceCreate( + ref="ds", + name="Test", + type="get_row", + table_id=1, + # Missing row_id + ) + + +# =========================================================================== +# Element tools tests +# =========================================================================== + + +@pytest.mark.django_db(transaction=True) +def test_create_heading_element(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + ctx = make_test_ctx(user, workspace) + result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate(ref="h1", type="heading", value="Welcome", level=1), + ], + thought="test", + ) + + assert len(result["created_elements"]) == 1 + assert result["created_elements"][0]["type"] == "heading" + assert result["created_elements"][0]["ref"] == "h1" + + +@pytest.mark.django_db(transaction=True) +def test_create_column_with_children(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + # Create column layout first + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + layout_result = create_layout_elements( + ctx, + page_id=page.id, + elements=[ + LayoutElementCreate(ref="cols", type="column", column_amount=2), + ], + thought="test", + ) + + assert len(layout_result["created_elements"]) == 1 + assert layout_result["created_elements"][0]["type"] == "column" + + # Then add children using display elements + result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate( + ref="left_heading", + type="heading", + value="Left", + parent_element="cols", + place_in_container="0", + ), + DisplayElementCreate( + ref="right_heading", + type="heading", + value="Right", + parent_element="cols", + place_in_container="1", + ), + ], + thought="test", + ) + + assert len(result["created_elements"]) == 2 + assert result["created_elements"][0]["type"] == "heading" + assert result["created_elements"][1]["type"] == "heading" + + +@pytest.mark.django_db(transaction=True) +def test_create_form_container_with_inputs(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Form", path="/form") + + ctx = make_test_ctx(user, workspace) + result = create_form_elements( + ctx, + page_id=page.id, + elements=[ + FormElementCreate( + ref="form", + type="form_container", + submit_button_label="Submit", + ), + FormElementCreate( + ref="name_input", + type="input_text", + label="Name", + placeholder="Enter your name", + required=True, + parent_element="form", + ), + FormElementCreate( + ref="email_input", + type="input_text", + label="Email", + validation_type="email", + required=True, + parent_element="form", + ), + ], + thought="test", + ) + + assert len(result["created_elements"]) == 3 + assert result["created_elements"][0]["type"] == "form_container" + assert result["created_elements"][1]["type"] == "input_text" + assert result["created_elements"][2]["type"] == "input_text" + + +@pytest.mark.django_db +def test_list_elements(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + ctx = make_test_ctx(user, workspace) + result = list_elements(ctx, page_id=page.id, thought="test") + + assert result["elements"] == [] + + +@pytest.mark.django_db(transaction=True) +def test_create_text_and_button(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + ctx = make_test_ctx(user, workspace) + result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate(ref="txt", type="text", value="Hello world"), + DisplayElementCreate(ref="btn", type="button", value="Click me"), + ], + thought="test", + ) + + assert len(result["created_elements"]) == 2 + assert result["created_elements"][0]["type"] == "text" + assert result["created_elements"][1]["type"] == "button" + + +@pytest.mark.django_db(transaction=True) +def test_create_image_element(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + ctx = make_test_ctx(user, workspace) + result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate( + ref="img", + type="image", + image_url="https://example.com/img.png", + alt_text="Example", + ), + ], + thought="test", + ) + + assert len(result["created_elements"]) == 1 + assert result["created_elements"][0]["type"] == "image" + + +# =========================================================================== +# Workflow action tools tests +# =========================================================================== + + +@pytest.mark.django_db(transaction=True) +def test_create_notification_action(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + # Create a button to attach the action to + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + el_result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate(ref="btn", type="button", value="Notify"), + ], + thought="test", + ) + assert len(el_result["created_elements"]) == 1 + + result = create_actions( + ctx, + page_id=page.id, + actions=[ + ActionCreate( + type="notification", + element="btn", + title="'Success!'", + description="'Item was created.'", + ), + ], + thought="test", + ) + + assert len(result["created_actions"]) == 1 + assert result["created_actions"][0]["type"] == "notification" + + +@pytest.mark.django_db(transaction=True) +def test_create_open_page_action(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + target_page = data_fixture.create_builder_page( + builder=builder, name="Detail", path="/detail" + ) + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + el_result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate(ref="link", type="button", value="Go"), + ], + thought="test", + ) + + result = create_actions( + ctx, + page_id=page.id, + actions=[ + ActionCreate( + type="open_page", + element="link", + navigate_to_page_id=target_page.id, + ), + ], + thought="test", + ) + + assert len(result["created_actions"]) == 1 + assert result["created_actions"][0]["type"] == "open_page" + + +def test_open_page_action_extracts_page_param_formulas(): + """open_page actions with $formula: page parameters should produce formulas.""" + + from baserow_enterprise.assistant.tools.builder.types.workflow_action import ( + ParameterMapping, + ) + + action = ActionCreate( + type="open_page", + element="btn", + navigate_to_page_id=99, + page_parameters=[ + ParameterMapping(name="id", value="$formula: the row id"), + ], + ) + formulas = action.get_formulas_to_create(None, None) + assert "page_param_0" in formulas + assert "row id" in formulas["page_param_0"] + + +def test_open_page_action_no_formulas_for_static(): + """open_page actions without $formula: should produce no formulas.""" + + from baserow_enterprise.assistant.tools.builder.types.workflow_action import ( + ParameterMapping, + ) + + action = ActionCreate( + type="open_page", + element="btn", + navigate_to_page_id=99, + page_parameters=[ + ParameterMapping(name="id", value="42"), + ], + ) + formulas = action.get_formulas_to_create(None, None) + assert formulas == {} + + +@pytest.mark.django_db(transaction=True) +def test_create_row_action(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Form", path="/form") + database = data_fixture.create_database_application(user=user, workspace=workspace) + table = data_fixture.create_database_table(user=user, database=database) + field = data_fixture.create_text_field(table=table, name="Name") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + # Create form with submit button + el_result = create_form_elements( + ctx, + page_id=page.id, + elements=[ + FormElementCreate(ref="form", type="form_container"), + ], + thought="test", + ) + + from baserow_enterprise.assistant.tools.builder.types import FieldValueMapping + + result = create_actions( + ctx, + page_id=page.id, + actions=[ + ActionCreate( + type="create_row", + element="form", + event="submit", + table_id=table.id, + field_values=[ + FieldValueMapping(field_id=str(field.id), value="'test value'"), + ], + ), + ], + thought="test", + ) + + assert len(result["created_actions"]) == 1 + assert result["created_actions"][0]["type"] == "create_row" + assert result["created_actions"][0]["event"] == "submit" + + +@pytest.mark.django_db +def test_list_actions(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + ctx = make_test_ctx(user, workspace) + result = list_actions(ctx, page_id=page.id, thought="test") + + assert result["workflow_actions"] == [] + + +# =========================================================================== +# add_action_field_mapping tests +# =========================================================================== + + +@pytest.mark.django_db(transaction=True) +def test_add_action_field_mapping_creates_mapping(data_fixture): + """add_action_field_mapping should create a field mapping on an existing action.""" + + from baserow_enterprise.assistant.tools.builder.tools import ( + add_action_field_mapping, + ) + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Form", path="/form") + database = data_fixture.create_database_application(user=user, workspace=workspace) + table = data_fixture.create_database_table(user=user, database=database) + name_field = data_fixture.create_text_field(table=table, name="Name") + email_field = data_fixture.create_text_field(table=table, name="Email") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + # Create a form and create_row action with one field mapping + from baserow_enterprise.assistant.tools.builder.types import FieldValueMapping + + create_form_elements( + ctx, + page_id=page.id, + elements=[FormElementCreate(ref="form", type="form_container")], + thought="test", + ) + action_result = create_actions( + ctx, + page_id=page.id, + actions=[ + ActionCreate( + type="create_row", + element="form", + event="submit", + table_id=table.id, + field_values=[ + FieldValueMapping(field_id=str(name_field.id), value="'Alice'"), + ], + ), + ], + thought="test", + ) + action_id = action_result["created_actions"][0]["id"] + + # Now add a second field mapping via add_action_field_mapping + result = add_action_field_mapping( + ctx, + action_id=action_id, + field_id=email_field.id, + value_formula="get('form_data.123')", + thought="test", + ) + + assert result["status"] == "created" + assert len(result["field_mappings"]) == 2 + mapped_field_ids = {m["field_id"] for m in result["field_mappings"]} + assert name_field.id in mapped_field_ids + assert email_field.id in mapped_field_ids + + +@pytest.mark.django_db(transaction=True) +def test_add_action_field_mapping_updates_existing(data_fixture): + """add_action_field_mapping should update an existing field mapping.""" + + from baserow_enterprise.assistant.tools.builder.tools import ( + add_action_field_mapping, + ) + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Form", path="/form") + database = data_fixture.create_database_application(user=user, workspace=workspace) + table = data_fixture.create_database_table(user=user, database=database) + name_field = data_fixture.create_text_field(table=table, name="Name") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + from baserow_enterprise.assistant.tools.builder.types import FieldValueMapping + + create_form_elements( + ctx, + page_id=page.id, + elements=[FormElementCreate(ref="form", type="form_container")], + thought="test", + ) + action_result = create_actions( + ctx, + page_id=page.id, + actions=[ + ActionCreate( + type="create_row", + element="form", + event="submit", + table_id=table.id, + field_values=[ + FieldValueMapping(field_id=str(name_field.id), value="'Alice'"), + ], + ), + ], + thought="test", + ) + action_id = action_result["created_actions"][0]["id"] + + # Update the existing mapping with a new formula + result = add_action_field_mapping( + ctx, + action_id=action_id, + field_id=name_field.id, + value_formula="get('form_data.456')", + thought="test", + ) + + assert result["status"] == "updated" + assert len(result["field_mappings"]) == 1 + assert result["field_mappings"][0]["field_id"] == name_field.id + + +# =========================================================================== +# Element ref tracking tests +# =========================================================================== + + +@pytest.mark.django_db(transaction=True) +def test_element_ref_tracking_across_calls(data_fixture): + """Verify that element refs created in one call are available in the next.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + # First call: create a button + create_display_elements( + ctx, + page_id=page.id, + elements=[DisplayElementCreate(ref="btn", type="button", value="Click")], + thought="test", + ) + + # Second call: create an action referencing the button from the first call + result = create_actions( + ctx, + page_id=page.id, + actions=[ + ActionCreate(type="notification", element="btn", title="'Hello'"), + ], + thought="test", + ) + + assert len(result["created_actions"]) == 1 + + +# =========================================================================== +# Element update tests +# =========================================================================== + + +@pytest.mark.django_db(transaction=True) +def test_update_heading_value(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + # Create a heading first + el_result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate(ref="h1", type="heading", value="Old Title", level=1), + ], + thought="test", + ) + element_id = el_result["created_elements"][0]["id"] + + # Update the heading value + result = update_element( + ctx, + page_id=page.id, + element=ElementUpdate(element_id=element_id, value="New Title"), + thought="test", + ) + + assert result["status"] == "ok" + assert result["element_id"] == element_id + assert result["element_type"] == "heading" + assert "value" in result["updated_fields"] + + # Verify the update persisted + from baserow.contrib.builder.elements.handler import ElementHandler + + el = ElementHandler().get_element(element_id) + assert el.specific.value["formula"] == "'New Title'" + + +@pytest.mark.django_db(transaction=True) +def test_update_input_text_label(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Form", path="/form") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + el_result = create_form_elements( + ctx, + page_id=page.id, + elements=[ + FormElementCreate( + ref="name_input", + type="input_text", + label="Old Label", + required=False, + ), + ], + thought="test", + ) + element_id = el_result["created_elements"][0]["id"] + + result = update_element( + ctx, + page_id=page.id, + element=ElementUpdate(element_id=element_id, label="New Label", required=True), + thought="test", + ) + + assert result["status"] == "ok" + assert result["element_type"] == "input_text" + assert "label" in result["updated_fields"] + assert "required" in result["updated_fields"] + + from baserow.contrib.builder.elements.handler import ElementHandler + + el = ElementHandler().get_element(element_id).specific + assert el.label["formula"] == "'New Label'" + assert el.required is True + + +@pytest.mark.django_db(transaction=True) +def test_update_column_amount(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + el_result = create_layout_elements( + ctx, + page_id=page.id, + elements=[ + LayoutElementCreate(ref="cols", type="column", column_amount=2), + ], + thought="test", + ) + element_id = el_result["created_elements"][0]["id"] + + result = update_element( + ctx, + page_id=page.id, + element=ElementUpdate(element_id=element_id, column_amount=3), + thought="test", + ) + + assert result["status"] == "ok" + assert result["element_type"] == "column" + assert "column_amount" in result["updated_fields"] + + from baserow.contrib.builder.elements.handler import ElementHandler + + el = ElementHandler().get_element(element_id).specific + assert el.column_amount == 3 + + +@pytest.mark.django_db(transaction=True) +def test_update_ignores_irrelevant_fields(data_fixture): + """Update a heading with column_amount — should be dropped by extract_allowed.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + el_result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate(ref="h1", type="heading", value="Title", level=1), + ], + thought="test", + ) + element_id = el_result["created_elements"][0]["id"] + + # column_amount is irrelevant for heading — should not cause an error + result = update_element( + ctx, + page_id=page.id, + element=ElementUpdate( + element_id=element_id, value="Updated Title", column_amount=3 + ), + thought="test", + ) + + assert result["status"] == "ok" + assert result["element_type"] == "heading" + + from baserow.contrib.builder.elements.handler import ElementHandler + + el = ElementHandler().get_element(element_id).specific + assert el.value["formula"] == "'Updated Title'" + + +@pytest.mark.django_db(transaction=True) +def test_update_with_formula_prefix(data_fixture): + """Verify $formula: triggers placeholder + formula generation.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + el_result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate(ref="h1", type="heading", value="Static"), + ], + thought="test", + ) + element_id = el_result["created_elements"][0]["id"] + + # The formula prefix should cause a placeholder to be set initially + el_update = ElementUpdate(element_id=element_id, value="$formula: the product name") + + # Check that to_update_kwargs uses placeholder for formula values + kwargs = el_update.to_update_kwargs("heading") + assert kwargs["value"]["formula"] == "''" + + # Check that get_formulas_to_update returns the formula description + formulas = el_update.get_formulas_to_update(None, None, "heading") + assert "value" in formulas + assert "product name" in formulas["value"] + + +def test_update_datetime_picker_formula_detected(): + """datetime_picker with $formula: default_value should trigger formula generation.""" + + el_update = ElementUpdate( + element_id=1, default_value="$formula: get('current_record.field_1439')" + ) + + # to_update_kwargs should set a placeholder for datetime_picker + kwargs = el_update.to_update_kwargs("datetime_picker") + assert "default_value" in kwargs + assert kwargs["default_value"]["formula"] == "''" + + # get_formulas_to_update should detect the formula for datetime_picker + formulas = el_update.get_formulas_to_update(None, None, "datetime_picker") + assert "default_value" in formulas + + +# =========================================================================== +# Page update tests +# =========================================================================== + + +@pytest.mark.django_db(transaction=True) +def test_update_page_name(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + ctx = make_test_ctx(user, workspace) + result = update_page( + ctx, + page=PageUpdate(page_id=page.id, name="Dashboard"), + thought="test", + ) + + assert result["status"] == "ok" + assert result["page"]["name"] == "Dashboard" + assert result["page"]["path"] == "/home" + assert "name" in result["updated_fields"] + assert "path" not in result["updated_fields"] + + +@pytest.mark.django_db(transaction=True) +def test_update_page_path_and_params(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page( + builder=builder, name="Detail", path="/detail" + ) + + ctx = make_test_ctx(user, workspace) + result = update_page( + ctx, + page=PageUpdate( + page_id=page.id, + path="/detail/:id", + path_params=[PagePathParam(name="id", type="numeric")], + ), + thought="test", + ) + + assert result["status"] == "ok" + assert result["page"]["path"] == "/detail/:id" + assert len(result["page"]["path_params"]) == 1 + assert result["page"]["path_params"][0]["name"] == "id" + assert "path" in result["updated_fields"] + assert "path_params" in result["updated_fields"] + + +@pytest.mark.django_db(transaction=True) +def test_update_page_visibility(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + ctx = make_test_ctx(user, workspace) + result = update_page( + ctx, + page=PageUpdate(page_id=page.id, visibility="logged-in"), + thought="test", + ) + + assert result["status"] == "ok" + assert result["page"]["visibility"] == "logged-in" + assert "visibility" in result["updated_fields"] + + +# =========================================================================== +# Data source update tests +# =========================================================================== + + +@pytest.mark.django_db(transaction=True) +def test_update_data_source_name(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + database = data_fixture.create_database_application(user=user, workspace=workspace) + table = data_fixture.create_database_table(user=user, database=database) + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + # Create a data source first + ds_result = create_data_sources( + ctx, + page_id=page.id, + data_sources=[ + DataSourceCreate( + ref="ds1", name="Old Name", type="list_rows", table_id=table.id + ), + ], + thought="test", + ) + ds_id = ds_result["created_data_sources"][0]["id"] + + result = update_data_source( + ctx, + page_id=page.id, + data_source=DataSourceUpdate(data_source_id=ds_id, name="New Name"), + thought="test", + ) + + assert result["status"] == "ok" + assert result["data_source_id"] == ds_id + assert "name" in result["updated_fields"] + + from baserow.contrib.builder.data_sources.handler import DataSourceHandler + + ds = DataSourceHandler().get_data_source(ds_id) + assert ds.name == "New Name" + + +@pytest.mark.django_db(transaction=True) +def test_update_data_source_table(data_fixture): + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + database = data_fixture.create_database_application(user=user, workspace=workspace) + table1 = data_fixture.create_database_table(user=user, database=database) + table2 = data_fixture.create_database_table(user=user, database=database) + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + ds_result = create_data_sources( + ctx, + page_id=page.id, + data_sources=[ + DataSourceCreate( + ref="ds1", name="Products", type="list_rows", table_id=table1.id + ), + ], + thought="test", + ) + ds_id = ds_result["created_data_sources"][0]["id"] + + result = update_data_source( + ctx, + page_id=page.id, + data_source=DataSourceUpdate(data_source_id=ds_id, table_id=table2.id), + thought="test", + ) + + assert result["status"] == "ok" + assert "table_id" in result["updated_fields"] + + from baserow.contrib.builder.data_sources.handler import DataSourceHandler + + ds = DataSourceHandler().get_data_source(ds_id) + assert ds.service.specific.table_id == table2.id + + +def test_update_data_source_formula_detected(): + """$formula: row_id should trigger formula generation.""" + + ds_update = DataSourceUpdate( + data_source_id=1, row_id="$formula: the id from the page parameter" + ) + + formulas = ds_update.get_formulas_to_update(None, None) + assert "row_id" in formulas + assert "page parameter" in formulas["row_id"] + + +def test_update_data_source_search_query_formula(): + """$formula: search_query should trigger formula generation.""" + + ds_update = DataSourceUpdate( + data_source_id=1, search_query="$formula: the search input text" + ) + + formulas = ds_update.get_formulas_to_update(None, None) + assert "search_query" in formulas + + +# --------------------------------------------------------------------------- +# Shared element tests +# --------------------------------------------------------------------------- + + +@pytest.mark.django_db(transaction=True) +def test_create_menu_with_items(data_fixture): + """Creating a menu element with menu_items should produce MenuItemElement rows.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/") + page2 = data_fixture.create_builder_page( + builder=builder, name="About", path="/about" + ) + + ctx = make_test_ctx(user, workspace) + result = create_layout_elements( + ctx, + page_id=page.id, + elements=[ + LayoutElementCreate( + ref="hdr", + type="header", + ), + LayoutElementCreate( + ref="nav", + type="menu", + parent_element="hdr", + menu_items=[ + MenuItemCreate(name="Home", page_id=page.id), + MenuItemCreate(name="About", page_id=page2.id), + ], + ), + ], + thought="test", + ) + + assert len(result["created_elements"]) == 2 + + # Menu should be on the shared page (child of header) + from baserow.contrib.builder.elements.handler import ElementHandler + + menu_id = result["ref_to_id_map"]["nav"] + menu_el = ElementHandler().get_element(menu_id).specific + assert menu_el.page.shared, "Menu should be on the shared page" + + items = list(menu_el.menu_items.all().order_by("menu_item_order")) + assert len(items) == 2 + assert items[0].name == "Home" + assert items[0].navigate_to_page_id == page.id + assert items[1].name == "About" + assert items[1].navigate_to_page_id == page2.id + + +@pytest.mark.django_db(transaction=True) +def test_update_menu_items(data_fixture): + """update_element with menu_items should replace the menu's items.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/") + page2 = data_fixture.create_builder_page( + builder=builder, name="About", path="/about" + ) + page3 = data_fixture.create_builder_page( + builder=builder, name="Contact", path="/contact" + ) + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + # Create header + menu with 1 item + result = create_layout_elements( + ctx, + page_id=page.id, + elements=[ + LayoutElementCreate(ref="hdr", type="header"), + LayoutElementCreate( + ref="nav", + type="menu", + parent_element="hdr", + menu_items=[MenuItemCreate(name="Home", page_id=page.id)], + ), + ], + thought="test", + ) + menu_id = result["ref_to_id_map"]["nav"] + + # Update to 3 items + update_result = update_element( + ctx, + page_id=page.id, + element=ElementUpdate( + element_id=menu_id, + menu_items=[ + MenuItemCreate(name="Home", page_id=page.id), + MenuItemCreate(name="About", page_id=page2.id), + MenuItemCreate(name="Contact", page_id=page3.id), + ], + ), + thought="test", + ) + + assert update_result["status"] == "ok" + assert "menu_items" in update_result["updated_fields"] + + from baserow.contrib.builder.elements.handler import ElementHandler + + menu_el = ElementHandler().get_element(menu_id).specific + items = list(menu_el.menu_items.all().order_by("menu_item_order")) + assert len(items) == 3 + assert items[0].name == "Home" + assert items[1].name == "About" + assert items[1].navigate_to_page_id == page2.id + assert items[2].name == "Contact" + assert items[2].navigate_to_page_id == page3.id + + +# =========================================================================== +# Element style tests +# =========================================================================== + + +@pytest.mark.django_db(transaction=True) +def test_update_element_style_box_model(data_fixture): + """Set border, padding, margin, background, width — all sides uniform.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + el_result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate(ref="h1", type="heading", value="Title", level=1), + ], + thought="test", + ) + element_id = el_result["created_elements"][0]["id"] + + result = update_element_style( + ctx, + page_id=page.id, + style=ElementStyleUpdate( + element_id=element_id, + border_color="#ff0000", + border_size=2, + padding=30, + margin=10, + border_radius=8, + background="color", + background_color="#00ff00", + width="full", + ), + thought="test", + ) + + assert result["status"] == "ok" + assert result["element_type"] == "heading" + + from baserow.contrib.builder.elements.handler import ElementHandler + + el = ElementHandler().get_element(element_id) + for side in ("top", "bottom", "left", "right"): + assert getattr(el, f"style_border_{side}_color") == "#ff0000" + assert getattr(el, f"style_border_{side}_size") == 2 + assert getattr(el, f"style_padding_{side}") == 30 + assert getattr(el, f"style_margin_{side}") == 10 + assert el.style_border_radius == 8 + assert el.style_background == "color" + assert el.style_background_color == "#00ff00" + assert el.style_width == "full" + + +@pytest.mark.django_db(transaction=True) +def test_update_element_style_reset(data_fixture): + """Apply custom styles, then reset to defaults.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + el_result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate(ref="h1", type="heading", value="Title", level=1), + ], + thought="test", + ) + element_id = el_result["created_elements"][0]["id"] + + # Apply custom styles + update_element_style( + ctx, + page_id=page.id, + style=ElementStyleUpdate( + element_id=element_id, + padding=50, + border_size=5, + background="color", + background_color="#123456", + ), + thought="test", + ) + + # Reset + result = update_element_style( + ctx, + page_id=page.id, + style=ElementStyleUpdate(element_id=element_id, reset=True), + thought="test", + ) + + assert result["status"] == "ok" + + from baserow.contrib.builder.elements.handler import ElementHandler + + el = ElementHandler().get_element(element_id) + assert el.style_padding_top == 10 + assert el.style_padding_left == 20 + assert el.style_border_top_size == 0 + assert el.style_background == "none" + assert el.style_background_color == "#ffffffff" + + +@pytest.mark.django_db(transaction=True) +def test_update_element_style_reset_with_overrides(data_fixture): + """reset=True + padding=50 → padding=50 all sides, rest at defaults.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + el_result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate(ref="h1", type="heading", value="Title", level=1), + ], + thought="test", + ) + element_id = el_result["created_elements"][0]["id"] + + result = update_element_style( + ctx, + page_id=page.id, + style=ElementStyleUpdate(element_id=element_id, reset=True, padding=50), + thought="test", + ) + + assert result["status"] == "ok" + + from baserow.contrib.builder.elements.handler import ElementHandler + + el = ElementHandler().get_element(element_id) + for side in ("top", "bottom", "left", "right"): + assert getattr(el, f"style_padding_{side}") == 50 + # Other fields at defaults + assert el.style_border_top_size == 0 + assert el.style_background == "none" + + +@pytest.mark.django_db(transaction=True) +def test_update_element_style_partial(data_fixture): + """Only set background_color — other fields untouched.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + el_result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate(ref="h1", type="heading", value="Title", level=1), + ], + thought="test", + ) + element_id = el_result["created_elements"][0]["id"] + + from baserow.contrib.builder.elements.handler import ElementHandler + + el_before = ElementHandler().get_element(element_id) + padding_before = el_before.style_padding_top + + result = update_element_style( + ctx, + page_id=page.id, + style=ElementStyleUpdate( + element_id=element_id, + background_color="#abcdef", + ), + thought="test", + ) + + assert result["status"] == "ok" + assert result["updated_fields"] == ["style_background_color"] + + el = ElementHandler().get_element(element_id) + assert el.style_background_color == "#abcdef" + assert el.style_padding_top == padding_before # unchanged + + +@pytest.mark.django_db(transaction=True) +def test_update_element_style_button_overrides(data_fixture): + """Button element with button style overrides → styles JSON.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + el_result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate(ref="btn", type="button", value="Click me"), + ], + thought="test", + ) + element_id = el_result["created_elements"][0]["id"] + + result = update_element_style( + ctx, + page_id=page.id, + style=ElementStyleUpdate( + element_id=element_id, + button=ButtonStyleOverride( + background_color="#ff0000", + text_color="#ffffff", + ), + ), + thought="test", + ) + + assert result["status"] == "ok" + assert result["element_type"] == "button" + + from baserow.contrib.builder.elements.handler import ElementHandler + + el = ElementHandler().get_element(element_id) + styles = el.styles + assert styles["button"]["button_background_color"] == "#ff0000" + assert styles["button"]["button_text_color"] == "#ffffff" + + +@pytest.mark.django_db(transaction=True) +def test_update_element_style_typography_overrides(data_fixture): + """Heading element with typography overrides → styles JSON.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + el_result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate(ref="h1", type="heading", value="Title", level=1), + ], + thought="test", + ) + element_id = el_result["created_elements"][0]["id"] + + result = update_element_style( + ctx, + page_id=page.id, + style=ElementStyleUpdate( + element_id=element_id, + typography=TypographyStyleOverride( + heading_1_text_color="#333333", + heading_1_font_size=32, + heading_1_text_alignment="center", + ), + ), + thought="test", + ) + + assert result["status"] == "ok" + + from baserow.contrib.builder.elements.handler import ElementHandler + + el = ElementHandler().get_element(element_id) + styles = el.styles + assert styles["typography"]["heading_1_text_color"] == "#333333" + assert styles["typography"]["heading_1_font_size"] == 32 + assert styles["typography"]["heading_1_text_alignment"] == "center" + + +@pytest.mark.django_db(transaction=True) +def test_update_element_style_input_overrides(data_fixture): + """Input text element with input overrides → styles JSON.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Form", path="/form") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + el_result = create_form_elements( + ctx, + page_id=page.id, + elements=[ + FormElementCreate(ref="inp", type="input_text", label="Name"), + ], + thought="test", + ) + element_id = el_result["created_elements"][0]["id"] + + result = update_element_style( + ctx, + page_id=page.id, + style=ElementStyleUpdate( + element_id=element_id, + input=InputStyleOverride( + input_background_color="#f0f0f0", + input_border_color="#cccccc", + label_text_color="#666666", + ), + ), + thought="test", + ) + + assert result["status"] == "ok" + + from baserow.contrib.builder.elements.handler import ElementHandler + + el = ElementHandler().get_element(element_id) + styles = el.styles + assert styles["input"]["input_background_color"] == "#f0f0f0" + assert styles["input"]["input_border_color"] == "#cccccc" + assert styles["input"]["label_text_color"] == "#666666" + + +@pytest.mark.django_db(transaction=True) +def test_update_element_style_ignores_wrong_block(data_fixture): + """On a heading, button overrides should be ignored (wrong type).""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + el_result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate(ref="h1", type="heading", value="Title", level=1), + ], + thought="test", + ) + element_id = el_result["created_elements"][0]["id"] + + result = update_element_style( + ctx, + page_id=page.id, + style=ElementStyleUpdate( + element_id=element_id, + button=ButtonStyleOverride(background_color="#ff0000"), + ), + thought="test", + ) + + # Button overrides on a heading should be silently ignored, returning a warning + assert result["status"] == "warning" + + from baserow.contrib.builder.elements.handler import ElementHandler + + el = ElementHandler().get_element(element_id) + # styles should not contain button block + assert "button" not in (el.styles or {}) + + +@pytest.mark.django_db(transaction=True) +def test_update_element_style_combined(data_fixture): + """Box model + theme overrides in one call.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + el_result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate(ref="btn", type="button", value="Go"), + ], + thought="test", + ) + element_id = el_result["created_elements"][0]["id"] + + result = update_element_style( + ctx, + page_id=page.id, + style=ElementStyleUpdate( + element_id=element_id, + padding=20, + border_color="#000000", + border_size=1, + button=ButtonStyleOverride( + background_color="#0000ff", + text_color="#ffffff", + ), + ), + thought="test", + ) + + assert result["status"] == "ok" + + from baserow.contrib.builder.elements.handler import ElementHandler + + el = ElementHandler().get_element(element_id) + # Box model + assert el.style_padding_top == 20 + assert el.style_border_top_color == "#000000" + assert el.style_border_top_size == 1 + # Theme overrides + assert el.styles["button"]["button_background_color"] == "#0000ff" + assert el.styles["button"]["button_text_color"] == "#ffffff" + + +@pytest.mark.django_db(transaction=True) +def test_update_element_style_merges_existing_overrides(data_fixture): + """Second style call should merge with existing overrides, not wipe them.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + el_result = create_display_elements( + ctx, + page_id=page.id, + elements=[ + DisplayElementCreate(ref="btn", type="button", value="Go"), + ], + thought="test", + ) + element_id = el_result["created_elements"][0]["id"] + + # First call: set font_size and background_color + update_element_style( + ctx, + page_id=page.id, + style=ElementStyleUpdate( + element_id=element_id, + button=ButtonStyleOverride( + font_size=18, + background_color="#0000ff", + ), + ), + thought="test", + ) + + # Second call: only change text_color + update_element_style( + ctx, + page_id=page.id, + style=ElementStyleUpdate( + element_id=element_id, + button=ButtonStyleOverride(text_color="#ffffff"), + ), + thought="test", + ) + + from baserow.contrib.builder.elements.handler import ElementHandler + + el = ElementHandler().get_element(element_id) + btn = el.styles["button"] + # First call's values should still be present + assert btn["button_font_size"] == 18 + assert btn["button_background_color"] == "#0000ff" + # Second call's value should be added + assert btn["button_text_color"] == "#ffffff" + + +@pytest.mark.django_db(transaction=True) +def test_update_element_style_menu_link_color(data_fixture): + """Menu element link overrides should store under 'menu' key, not 'link'.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + # Create header + menu + result = create_layout_elements( + ctx, + page_id=page.id, + elements=[ + LayoutElementCreate(ref="hdr", type="header"), + LayoutElementCreate( + ref="nav", + type="menu", + parent_element="hdr", + menu_items=[MenuItemCreate(name="Home", page_id=page.id)], + ), + ], + thought="test", + ) + menu_id = result["ref_to_id_map"]["nav"] + + # Set link color to red on menu + style_result = update_element_style( + ctx, + page_id=page.id, + style=ElementStyleUpdate( + element_id=menu_id, + link=LinkStyleOverride(text_color="#ff0000"), + ), + thought="test", + ) + + assert style_result["status"] == "ok" + assert style_result["element_type"] == "menu" + + from baserow.contrib.builder.elements.handler import ElementHandler + + el = ElementHandler().get_element(menu_id) + # Link props go under "menu" key for menu elements + assert "menu" in el.styles + assert el.styles["menu"]["link_text_color"] == "#ff0000" + # Should NOT have a separate "link" key + assert "link" not in el.styles + + +@pytest.mark.django_db(transaction=True) +def test_update_element_style_menu_button_and_link(data_fixture): + """Menu element: both button and link overrides merge under 'menu' key.""" + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + result = create_layout_elements( + ctx, + page_id=page.id, + elements=[ + LayoutElementCreate(ref="hdr", type="header"), + LayoutElementCreate( + ref="nav", + type="menu", + parent_element="hdr", + menu_items=[MenuItemCreate(name="Home", page_id=page.id)], + ), + ], + thought="test", + ) + menu_id = result["ref_to_id_map"]["nav"] + + update_element_style( + ctx, + page_id=page.id, + style=ElementStyleUpdate( + element_id=menu_id, + button=ButtonStyleOverride(background_color="#0000ff"), + link=LinkStyleOverride(text_color="#ff0000"), + ), + thought="test", + ) + + from baserow.contrib.builder.elements.handler import ElementHandler + + el = ElementHandler().get_element(menu_id) + menu_styles = el.styles["menu"] + assert menu_styles["button_background_color"] == "#0000ff" + assert menu_styles["link_text_color"] == "#ff0000" + + +# =========================================================================== +# Table element property options tests +# =========================================================================== + + +@pytest.mark.django_db(transaction=True) +def test_table_element_auto_enables_filter_sort_search(data_fixture): + """Table text columns referencing real fields get filter/sort/search enabled.""" + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + database = data_fixture.create_database_application(user=user, workspace=workspace) + table = data_fixture.create_database_table(user=user, database=database) + name_field = data_fixture.create_text_field(table=table, name="Name") + email_field = data_fixture.create_text_field(table=table, name="Email") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + # Create a data source first + ds_result = create_data_sources( + ctx, + page_id=page.id, + data_sources=[ + DataSourceCreate( + ref="ds1", + name="People", + type="list_rows", + table_id=table.id, + ), + ], + thought="test", + ) + ds_id = ds_result["ref_to_id_map"]["ds1"] + + # Create a table with 2 text columns + 1 button column + result = create_collection_elements( + ctx, + page_id=page.id, + elements=[ + CollectionElementCreate( + ref="tbl", + type="table", + data_source=ds_id, + fields=[ + TableFieldConfig(name="Name", type="text"), + TableFieldConfig(name="Email", type="text"), + TableFieldConfig(name="Actions", type="button", label="Edit"), + ], + ), + ], + thought="test", + ) + + table_element_id = result["ref_to_id_map"]["tbl"] + + from baserow.contrib.builder.elements.models import CollectionElementPropertyOptions + + options = list( + CollectionElementPropertyOptions.objects.filter( + element_id=table_element_id + ).order_by("schema_property") + ) + + # Should have options for both text columns, not for the button column + assert len(options) == 2 + + schema_props = {o.schema_property for o in options} + assert f"field_{name_field.id}" in schema_props + assert f"field_{email_field.id}" in schema_props + + for opt in options: + assert opt.filterable is True + assert opt.sortable is True + assert opt.searchable is True + + +@pytest.mark.django_db(transaction=True) +def test_update_table_element_replace_columns(data_fixture): + """Updating a table element's fields replaces all columns.""" + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + database = data_fixture.create_database_application(user=user, workspace=workspace) + table = data_fixture.create_database_table(user=user, database=database) + name_field = data_fixture.create_text_field(table=table, name="Name") + email_field = data_fixture.create_text_field(table=table, name="Email") + phone_field = data_fixture.create_text_field(table=table, name="Phone") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + # Create data source + ds_result = create_data_sources( + ctx, + page_id=page.id, + data_sources=[ + DataSourceCreate( + ref="ds1", name="People", type="list_rows", table_id=table.id + ), + ], + thought="test", + ) + ds_id = ds_result["ref_to_id_map"]["ds1"] + + # Create table with 2 columns + el_result = create_collection_elements( + ctx, + page_id=page.id, + elements=[ + CollectionElementCreate( + ref="tbl", + type="table", + data_source=ds_id, + fields=[ + TableFieldConfig(name="Name", type="text"), + TableFieldConfig(name="Email", type="text"), + ], + ), + ], + thought="test", + ) + table_element_id = el_result["ref_to_id_map"]["tbl"] + + from baserow.contrib.builder.elements.handler import ElementHandler + + element = ElementHandler().get_element(table_element_id).specific + + # Verify initial state: 2 columns + fields_before = list(element.fields.order_by("order")) + assert len(fields_before) == 2 + assert fields_before[0].name == "Name" + assert fields_before[1].name == "Email" + + # Update: replace with 3 columns (add Phone, remove Email) + update_element( + ctx, + page_id=page.id, + element=ElementUpdate( + element_id=table_element_id, + fields=[ + TableFieldConfig(name="Name", type="text"), + TableFieldConfig(name="Phone", type="text"), + TableFieldConfig(name="Actions", type="button", label="Edit"), + ], + ), + thought="test", + ) + + element = ElementHandler().get_element(table_element_id).specific + fields_after = list(element.fields.order_by("order")) + assert len(fields_after) == 3 + assert fields_after[0].name == "Name" + assert fields_after[1].name == "Phone" + assert fields_after[2].name == "Actions" + assert fields_after[2].type == "button" + + +@pytest.mark.django_db(transaction=True) +def test_update_table_element_add_fields(data_fixture): + """add_fields appends columns without touching existing ones.""" + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + database = data_fixture.create_database_application(user=user, workspace=workspace) + table = data_fixture.create_database_table(user=user, database=database) + data_fixture.create_text_field(table=table, name="Name") + data_fixture.create_text_field(table=table, name="Email") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + ds_result = create_data_sources( + ctx, + page_id=page.id, + data_sources=[ + DataSourceCreate( + ref="ds1", name="People", type="list_rows", table_id=table.id + ), + ], + thought="test", + ) + ds_id = ds_result["ref_to_id_map"]["ds1"] + + # Create table with 1 column + el_result = create_collection_elements( + ctx, + page_id=page.id, + elements=[ + CollectionElementCreate( + ref="tbl", + type="table", + data_source=ds_id, + fields=[TableFieldConfig(name="Name", type="text")], + ), + ], + thought="test", + ) + table_element_id = el_result["ref_to_id_map"]["tbl"] + + from baserow.contrib.builder.elements.handler import ElementHandler + + element = ElementHandler().get_element(table_element_id).specific + assert element.fields.count() == 1 + + # Add Email column — Name should be preserved + update_element( + ctx, + page_id=page.id, + element=ElementUpdate( + element_id=table_element_id, + add_fields=[TableFieldConfig(name="Email", type="text")], + ), + thought="test", + ) + + element = ElementHandler().get_element(table_element_id).specific + fields = list(element.fields.order_by("order")) + assert len(fields) == 2 + assert fields[0].name == "Name" + assert fields[1].name == "Email" + + +@pytest.mark.django_db(transaction=True) +def test_update_table_element_remove_fields(data_fixture): + """remove_fields removes columns by name, preserving the rest.""" + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + database = data_fixture.create_database_application(user=user, workspace=workspace) + table = data_fixture.create_database_table(user=user, database=database) + data_fixture.create_text_field(table=table, name="Name") + data_fixture.create_text_field(table=table, name="Email") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + ds_result = create_data_sources( + ctx, + page_id=page.id, + data_sources=[ + DataSourceCreate( + ref="ds1", name="People", type="list_rows", table_id=table.id + ), + ], + thought="test", + ) + ds_id = ds_result["ref_to_id_map"]["ds1"] + + # Create table with 2 columns + el_result = create_collection_elements( + ctx, + page_id=page.id, + elements=[ + CollectionElementCreate( + ref="tbl", + type="table", + data_source=ds_id, + fields=[ + TableFieldConfig(name="Name", type="text"), + TableFieldConfig(name="Email", type="text"), + ], + ), + ], + thought="test", + ) + table_element_id = el_result["ref_to_id_map"]["tbl"] + + from baserow.contrib.builder.elements.handler import ElementHandler + + element = ElementHandler().get_element(table_element_id).specific + assert element.fields.count() == 2 + + # Remove Email by name — Name should be preserved + update_element( + ctx, + page_id=page.id, + element=ElementUpdate( + element_id=table_element_id, + remove_fields=["Email"], + ), + thought="test", + ) + + element = ElementHandler().get_element(table_element_id).specific + fields = list(element.fields.order_by("order")) + assert len(fields) == 1 + assert fields[0].name == "Name" + + +@pytest.mark.django_db(transaction=True) +def test_update_table_element_add_and_remove_fields(data_fixture): + """add_fields and remove_fields can be combined in a single update.""" + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + page = data_fixture.create_builder_page(builder=builder, name="Home", path="/home") + database = data_fixture.create_database_application(user=user, workspace=workspace) + table = data_fixture.create_database_table(user=user, database=database) + data_fixture.create_text_field(table=table, name="Name") + data_fixture.create_text_field(table=table, name="Email") + data_fixture.create_text_field(table=table, name="Phone") + + tool_helpers = create_fake_tool_helpers() + ctx = make_test_ctx(user, workspace, tool_helpers) + + ds_result = create_data_sources( + ctx, + page_id=page.id, + data_sources=[ + DataSourceCreate( + ref="ds1", name="People", type="list_rows", table_id=table.id + ), + ], + thought="test", + ) + ds_id = ds_result["ref_to_id_map"]["ds1"] + + el_result = create_collection_elements( + ctx, + page_id=page.id, + elements=[ + CollectionElementCreate( + ref="tbl", + type="table", + data_source=ds_id, + fields=[ + TableFieldConfig(name="Name", type="text"), + TableFieldConfig(name="Email", type="text"), + ], + ), + ], + thought="test", + ) + table_element_id = el_result["ref_to_id_map"]["tbl"] + + # Remove Email, add Phone + button — in one call + update_element( + ctx, + page_id=page.id, + element=ElementUpdate( + element_id=table_element_id, + remove_fields=["Email"], + add_fields=[ + TableFieldConfig(name="Phone", type="text"), + TableFieldConfig(name="Actions", type="button", label="Edit"), + ], + ), + thought="test", + ) + + from baserow.contrib.builder.elements.handler import ElementHandler + + element = ElementHandler().get_element(table_element_id).specific + fields = list(element.fields.order_by("order")) + assert len(fields) == 3 + assert fields[0].name == "Name" + assert fields[1].name == "Phone" + assert fields[2].name == "Actions" + assert fields[2].type == "button" + + +# =========================================================================== +# User source tools tests +# =========================================================================== + + +@pytest.mark.django_db(transaction=True) +def test_setup_user_source_new_table(data_fixture): + """Create a user source with a brand-new users table.""" + + from baserow.contrib.database.fields.models import Field + from baserow.core.db import specific_iterator + from baserow_enterprise.assistant.tools.builder.tools import setup_user_source + from baserow_enterprise.assistant.tools.builder.types.user_source import ( + UserSourceSetup, + ) + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + database = data_fixture.create_database_application(user=user, workspace=workspace) + + ctx = make_test_ctx(user, workspace) + result = setup_user_source( + ctx, + application_id=builder.id, + setup=UserSourceSetup( + name="App Users", + database_id=database.id, + roles=["Admin", "Editor"], + ), + thought="test", + ) + + assert "user_source_id" in result + assert "table_id" in result + assert "Admin" in result["roles"] + assert "Editor" in result["roles"] + + # Verify table fields + table_fields = list( + specific_iterator( + Field.objects.filter(table_id=result["table_id"]) + .order_by("order") + .select_related("content_type") + ) + ) + field_names = [f.name for f in table_fields] + assert "Name" in field_names + assert "Email" in field_names + assert "Password" in field_names + assert "Role" in field_names + + # Verify example rows (one per role) + from baserow.contrib.database.table.models import Table + + table = Table.objects.get(id=result["table_id"]) + model = table.get_model() + rows = list(model.objects.all()) + assert len(rows) == 2 # Admin + Editor + + # Verify user source has auth provider + from baserow.core.user_sources.handler import UserSourceHandler + + us = UserSourceHandler().get_user_source(result["user_source_id"]) + assert us.table_id == result["table_id"] + providers = list(us.auth_providers.all()) + assert len(providers) == 1 + + # Verify login page was created with auth_form element + assert "login_page_id" in result + builder.refresh_from_db() + assert builder.login_page_id == result["login_page_id"] + + from baserow.contrib.builder.elements.handler import ElementHandler + from baserow.contrib.builder.pages.handler import PageHandler + + login_page = PageHandler().get_page(result["login_page_id"]) + elements = ElementHandler().get_elements(login_page) + auth_forms = [e for e in elements if e.get_type().type == "auth_form"] + assert len(auth_forms) == 1 + assert auth_forms[0].specific.user_source_id == result["user_source_id"] + + +@pytest.mark.django_db(transaction=True) +def test_setup_user_source_existing_table(data_fixture): + """Use an existing table that has the required fields.""" + + from baserow_enterprise.assistant.tools.builder.tools import setup_user_source + from baserow_enterprise.assistant.tools.builder.types.user_source import ( + UserSourceSetup, + ) + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + database = data_fixture.create_database_application(user=user, workspace=workspace) + table = data_fixture.create_database_table(database=database, name="Members") + data_fixture.create_text_field(table=table, name="Name", primary=True) + data_fixture.create_email_field(table=table, name="Email") + data_fixture.create_password_field(table=table, name="Password") + + ctx = make_test_ctx(user, workspace) + result = setup_user_source( + ctx, + application_id=builder.id, + setup=UserSourceSetup(name="Members Source", table_id=table.id), + thought="test", + ) + + assert result["table_id"] == table.id + assert "user_source_id" in result + + from baserow.core.user_sources.handler import UserSourceHandler + + us = UserSourceHandler().get_user_source(result["user_source_id"]) + assert us.table_id == table.id + + +@pytest.mark.django_db(transaction=True) +def test_setup_user_source_existing_table_creates_password_field(data_fixture): + """If the existing table lacks a password field, one is created.""" + + from baserow.contrib.database.fields.models import Field + from baserow.core.db import specific_iterator + from baserow_enterprise.assistant.tools.builder.tools import setup_user_source + from baserow_enterprise.assistant.tools.builder.types.user_source import ( + UserSourceSetup, + ) + + user = data_fixture.create_user() + workspace = data_fixture.create_workspace(user=user) + builder = data_fixture.create_builder_application(user=user, workspace=workspace) + database = data_fixture.create_database_application(user=user, workspace=workspace) + table = data_fixture.create_database_table(database=database, name="People") + data_fixture.create_text_field(table=table, name="Name", primary=True) + data_fixture.create_email_field(table=table, name="Email") + # No password field + + ctx = make_test_ctx(user, workspace) + result = setup_user_source( + ctx, + application_id=builder.id, + setup=UserSourceSetup(name="People Source", table_id=table.id), + thought="test", + ) + + assert result["table_id"] == table.id + + # Verify password field was created + table_fields = list( + specific_iterator( + Field.objects.filter(table=table) + .order_by("order") + .select_related("content_type") + ) + ) + from baserow.contrib.database.fields.models import PasswordField + + password_fields = [f for f in table_fields if isinstance(f, PasswordField)] + assert len(password_fields) == 1 + assert password_fields[0].name == "Password" diff --git a/enterprise/backend/tests/baserow_enterprise_tests/views/test_restricted_view.py b/enterprise/backend/tests/baserow_enterprise_tests/views/test_restricted_view.py index d63e2cd548..9c0e8355fd 100644 --- a/enterprise/backend/tests/baserow_enterprise_tests/views/test_restricted_view.py +++ b/enterprise/backend/tests/baserow_enterprise_tests/views/test_restricted_view.py @@ -5,22 +5,38 @@ from django.urls import reverse import pytest -from starlette.status import HTTP_200_OK +from starlette.status import HTTP_200_OK, HTTP_401_UNAUTHORIZED, HTTP_404_NOT_FOUND from baserow.contrib.database.api.constants import PUBLIC_PLACEHOLDER_ENTITY_ID from baserow.contrib.database.fields.models import DateField from baserow.contrib.database.rows.handler import RowHandler -from baserow.contrib.database.views.models import View +from baserow.contrib.database.views.models import ( + GalleryViewFieldOptions, + GridViewFieldOptions, + View, + ViewDecoration, + ViewGroupBy, + ViewSort, +) from baserow.contrib.database.views.registries import view_type_registry from baserow.contrib.database.views.view_ownership_types import ( CollaborativeViewOwnershipType, ) from baserow.contrib.database.views.view_types import GalleryViewType, GridViewType from baserow.contrib.database.ws.views.rows.handler import ViewRealtimeRowsHandler +from baserow.core.exceptions import PermissionDenied as BaserowPermissionDenied from baserow.core.utils import get_value_at_path from baserow_enterprise.role.handler import RoleAssignmentHandler from baserow_enterprise.role.models import Role from baserow_enterprise.view_ownership_types import RestrictedViewOwnershipType +from baserow_enterprise.ws.restricted_view.fields.signals import ( + _broadcast_payload_to_all_restricted_views, +) +from baserow_premium.views.models import ( + CalendarViewFieldOptions, + KanbanViewFieldOptions, + TimelineViewFieldOptions, +) from baserow_premium.views.view_types import ( CalendarViewType, KanbanViewType, @@ -427,3 +443,1662 @@ def test_filters_are_forcefully_applied_to_all_views_types_for_editors_and_down( # to the view and should therefore not be able to see row 2 because it does not # match the filters of the view. assert len(get_value_at_path(response_json, response_path)) == 1, view_type.type + + +def _set_field_option(view, field, hidden): + model_map = { + "gridviewfieldoptions_set": (GridViewFieldOptions, "grid_view"), + "galleryviewfieldoptions_set": (GalleryViewFieldOptions, "gallery_view"), + "kanbanviewfieldoptions_set": (KanbanViewFieldOptions, "kanban_view"), + "calendarviewfieldoptions_set": (CalendarViewFieldOptions, "calendar_view"), + "timelineviewfieldoptions_set": (TimelineViewFieldOptions, "timeline_view"), + } + for attr, (model_cls, fk_name) in model_map.items(): + if hasattr(view, attr): + model_cls.objects.update_or_create( + **{fk_name: view, "field": field}, defaults={"hidden": hidden} + ) + return + + raise ValueError(f"Unsupported view type: {type(view)}") + + +def _set_field_hidden(view, hidden_field, visible_fields=None): + _set_field_option(view, hidden_field, hidden=True) + for f in visible_fields or []: + _set_field_option(view, f, hidden=False) + + +# Maps view type to (url_name, fixture method name, response_path). Kanban and +# Calendar are tested separately because they need extra setup (single_select field +# and date field respectively). +hidden_field_view_type_url_mapping = { + GridViewType.type: ( + "api:database:views:grid:list", + "create_grid_view", + "results", + ), + GalleryViewType.type: ( + "api:database:views:gallery:list", + "create_gallery_view", + "results", + ), + TimelineViewType.type: ( + "api:database:views:timeline:list", + "create_timeline_view", + "results", + ), +} + + +@pytest.mark.django_db +@override_settings(DEBUG=True) +def test_hidden_fields_visible_for_builders_and_up( + enterprise_data_fixture, premium_data_fixture, api_client +): + enterprise_data_fixture.enable_enterprise() + + user, token = enterprise_data_fixture.create_user_and_token() + table = enterprise_data_fixture.create_database_table(user=user) + visible_field = enterprise_data_fixture.create_text_field(table=table, primary=True) + hidden_field = enterprise_data_fixture.create_text_field(table=table) + + RowHandler().create_row( + user, + table, + values={ + f"field_{visible_field.id}": "vis", + f"field_{hidden_field.id}": "hid", + }, + ) + + for view_type_str, ( + view_path, + fixture_create, + response_path, + ) in hidden_field_view_type_url_mapping.items(): + view = getattr(premium_data_fixture, fixture_create)( + table=table, ownership_type=RestrictedViewOwnershipType.type + ) + + _set_field_hidden(view, hidden_field, visible_fields=[visible_field]) + + response = api_client.get( + reverse(view_path, kwargs={"view_id": view.id}) + "?include=field_options", + format="json", + HTTP_AUTHORIZATION=f"JWT {token}", + ) + assert response.status_code == HTTP_200_OK, view_type_str + response_json = response.json() + rows = get_value_at_path(response_json, response_path) + assert f"field_{hidden_field.id}" in rows[0], ( + f"Builder should see hidden field in {view_type_str}" + ) + assert str(hidden_field.id) in response_json.get("field_options", {}), ( + f"Builder should see hidden field options in {view_type_str}" + ) + + +@pytest.mark.django_db +@override_settings(DEBUG=True) +def test_hidden_fields_excluded_for_editors_and_down( + enterprise_data_fixture, premium_data_fixture, api_client +): + enterprise_data_fixture.enable_enterprise() + + user, token = enterprise_data_fixture.create_user_and_token() + user2, token2 = enterprise_data_fixture.create_user_and_token() + workspace = enterprise_data_fixture.create_workspace(user=user, members=[user2]) + database = enterprise_data_fixture.create_database_application(workspace=workspace) + table = enterprise_data_fixture.create_database_table(database=database) + visible_field = enterprise_data_fixture.create_text_field(table=table, primary=True) + hidden_field = enterprise_data_fixture.create_text_field(table=table) + + editor_role = Role.objects.get(uid="EDITOR") + no_access_role = Role.objects.get(uid="NO_ACCESS") + RoleAssignmentHandler().assign_role( + user2, workspace, role=no_access_role, scope=workspace + ) + + RowHandler().create_row( + user, + table, + values={ + f"field_{visible_field.id}": "vis", + f"field_{hidden_field.id}": "hid", + }, + ) + + for view_type_str, ( + view_path, + fixture_create, + response_path, + ) in hidden_field_view_type_url_mapping.items(): + view = getattr(premium_data_fixture, fixture_create)( + table=table, ownership_type=RestrictedViewOwnershipType.type + ) + + # Hide the field in this view. + _set_field_hidden(view, hidden_field, visible_fields=[visible_field]) + + RoleAssignmentHandler().assign_role( + user2, + workspace, + role=editor_role, + scope=View.objects.get(id=view.id), + ) + + response = api_client.get( + reverse(view_path, kwargs={"view_id": view.id}) + "?include=field_options", + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + assert response.status_code == HTTP_200_OK, view_type_str + response_json = response.json() + rows = get_value_at_path(response_json, response_path) + # Editor should NOT see the hidden field value. + assert f"field_{hidden_field.id}" not in rows[0], ( + f"Editor should not see hidden field in {view_type_str}" + ) + # Editor should see the visible field. + assert f"field_{visible_field.id}" in rows[0], ( + f"Editor should see visible field in {view_type_str}" + ) + field_options = response_json.get("field_options", {}) + assert str(hidden_field.id) not in field_options, ( + f"Editor should not see hidden field options in {view_type_str}" + ) + assert str(visible_field.id) in field_options, ( + f"Editor should see visible field options in {view_type_str}" + ) + + +@pytest.mark.django_db +@override_settings(DEBUG=True) +def test_editor_cannot_create_row_with_hidden_field_values( + enterprise_data_fixture, +): + enterprise_data_fixture.enable_enterprise() + + user = enterprise_data_fixture.create_user() + user2 = enterprise_data_fixture.create_user() + workspace = enterprise_data_fixture.create_workspace(user=user, members=[user2]) + database = enterprise_data_fixture.create_database_application(workspace=workspace) + table = enterprise_data_fixture.create_database_table(database=database) + visible_field = enterprise_data_fixture.create_text_field(table=table, primary=True) + hidden_field = enterprise_data_fixture.create_text_field(table=table) + + view = enterprise_data_fixture.create_grid_view( + table=table, ownership_type=RestrictedViewOwnershipType.type + ) + GridViewFieldOptions.objects.update_or_create( + grid_view=view, field=hidden_field, defaults={"hidden": True} + ) + + editor_role = Role.objects.get(uid="EDITOR") + no_access_role = Role.objects.get(uid="NO_ACCESS") + RoleAssignmentHandler().assign_role( + user2, workspace, role=no_access_role, scope=workspace + ) + RoleAssignmentHandler().assign_role( + user2, + workspace, + role=editor_role, + scope=View.objects.get(id=view.id), + ) + + with pytest.raises(BaserowPermissionDenied): + RowHandler().create_row( + user2, + table, + values={f"field_{hidden_field.id}": "sneaky"}, + view=view, + ) + + # Editor can create a row with only visible field values. + row = RowHandler().create_row( + user2, + table, + values={f"field_{visible_field.id}": "ok"}, + view=view, + ) + assert row is not None + + +@pytest.mark.django_db +@override_settings(DEBUG=True) +def test_editor_cannot_update_row_with_hidden_field_values( + enterprise_data_fixture, +): + enterprise_data_fixture.enable_enterprise() + + user = enterprise_data_fixture.create_user() + user2 = enterprise_data_fixture.create_user() + workspace = enterprise_data_fixture.create_workspace(user=user, members=[user2]) + database = enterprise_data_fixture.create_database_application(workspace=workspace) + table = enterprise_data_fixture.create_database_table(database=database) + visible_field = enterprise_data_fixture.create_text_field(table=table, primary=True) + hidden_field = enterprise_data_fixture.create_text_field(table=table) + + view = enterprise_data_fixture.create_grid_view( + table=table, ownership_type=RestrictedViewOwnershipType.type + ) + GridViewFieldOptions.objects.update_or_create( + grid_view=view, field=hidden_field, defaults={"hidden": True} + ) + + row = RowHandler().create_row( + user, + table, + values={ + f"field_{visible_field.id}": "vis", + f"field_{hidden_field.id}": "hid", + }, + ) + + editor_role = Role.objects.get(uid="EDITOR") + no_access_role = Role.objects.get(uid="NO_ACCESS") + RoleAssignmentHandler().assign_role( + user2, workspace, role=no_access_role, scope=workspace + ) + RoleAssignmentHandler().assign_role( + user2, + workspace, + role=editor_role, + scope=View.objects.get(id=view.id), + ) + + # Editor tries to update hidden field value via view — should fail. + with pytest.raises(BaserowPermissionDenied): + RowHandler().update_row( + user2, + table, + row, + values={f"field_{hidden_field.id}": "sneaky"}, + view=view, + ) + + # Editor can update visible field values. + updated_row = RowHandler().update_row( + user2, + table, + row, + values={f"field_{visible_field.id}": "updated"}, + view=view, + ) + assert getattr(updated_row, f"field_{visible_field.id}") == "updated" + + +@pytest.mark.django_db +@override_settings(DEBUG=True) +def test_editor_cannot_create_row_with_hidden_field_values_user_field_names( + enterprise_data_fixture, +): + enterprise_data_fixture.enable_enterprise() + + user = enterprise_data_fixture.create_user() + user2 = enterprise_data_fixture.create_user() + workspace = enterprise_data_fixture.create_workspace(user=user, members=[user2]) + database = enterprise_data_fixture.create_database_application(workspace=workspace) + table = enterprise_data_fixture.create_database_table(database=database) + visible_field = enterprise_data_fixture.create_text_field( + table=table, primary=True, name="Visible" + ) + hidden_field = enterprise_data_fixture.create_text_field(table=table, name="Hidden") + + view = enterprise_data_fixture.create_grid_view( + table=table, ownership_type=RestrictedViewOwnershipType.type + ) + GridViewFieldOptions.objects.update_or_create( + grid_view=view, field=hidden_field, defaults={"hidden": True} + ) + + editor_role = Role.objects.get(uid="EDITOR") + no_access_role = Role.objects.get(uid="NO_ACCESS") + RoleAssignmentHandler().assign_role( + user2, workspace, role=no_access_role, scope=workspace + ) + RoleAssignmentHandler().assign_role( + user2, + workspace, + role=editor_role, + scope=View.objects.get(id=view.id), + ) + + # Editor tries to create a row setting a hidden field via user_field_names — should + # fail. + with pytest.raises(BaserowPermissionDenied): + RowHandler().create_row( + user2, + table, + values={"Hidden": "sneaky"}, + view=view, + user_field_names=True, + ) + + # Editor can create a row with only visible field values using user_field_names. + row = RowHandler().create_row( + user2, + table, + values={"Visible": "ok"}, + view=view, + user_field_names=True, + ) + assert row is not None + + +@pytest.mark.django_db +@override_settings(DEBUG=True) +def test_fetching_restricted_view_fields( + enterprise_data_fixture, + api_client, +): + enterprise_data_fixture.enable_enterprise() + + user, token = enterprise_data_fixture.create_user_and_token() + user2, token2 = enterprise_data_fixture.create_user_and_token() + workspace = enterprise_data_fixture.create_workspace(user=user, members=[user2]) + database = enterprise_data_fixture.create_database_application(workspace=workspace) + table = enterprise_data_fixture.create_database_table(database=database) + visible_field = enterprise_data_fixture.create_text_field(table=table, primary=True) + hidden_field = enterprise_data_fixture.create_text_field(table=table, primary=False) + + grid = enterprise_data_fixture.create_grid_view( + table=table, + user=user, + create_options=False, + ownership_type=RestrictedViewOwnershipType.type, + ) + enterprise_data_fixture.create_grid_view_field_option( + grid, visible_field, hidden=False + ) + enterprise_data_fixture.create_grid_view_field_option( + grid, hidden_field, hidden=True + ) + + editor_role = Role.objects.get(uid="EDITOR") + no_access_role = Role.objects.get(uid="NO_ACCESS") + workspace = table.database.workspace + RoleAssignmentHandler().assign_role( + user2, workspace, role=no_access_role, scope=workspace + ) + RoleAssignmentHandler().assign_role( + user2, workspace, role=editor_role, scope=View.objects.get(pk=grid.id) + ) + + # Without view param, editor has no table-level field access. + url = reverse("api:database:fields:list", kwargs={"table_id": table.id}) + response = api_client.get( + url, + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + assert response.status_code == HTTP_401_UNAUTHORIZED + + # With view param, editor sees only visible fields. + response = api_client.get( + url + f"?view={grid.id}", + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + response_json = response.json() + assert response.status_code == HTTP_200_OK + assert len(response_json) == 1 + assert response_json[0]["id"] == visible_field.id + + +@pytest.mark.django_db +@override_settings(DEBUG=True) +def test_fetching_restricted_view_fields_as_admin( + enterprise_data_fixture, + api_client, +): + enterprise_data_fixture.enable_enterprise() + + user, token = enterprise_data_fixture.create_user_and_token() + user2, token2 = enterprise_data_fixture.create_user_and_token() + workspace = enterprise_data_fixture.create_workspace(user=user, members=[user2]) + database = enterprise_data_fixture.create_database_application(workspace=workspace) + table = enterprise_data_fixture.create_database_table(database=database) + visible_field = enterprise_data_fixture.create_text_field(table=table, primary=True) + hidden_field = enterprise_data_fixture.create_text_field(table=table, primary=False) + + grid = enterprise_data_fixture.create_grid_view( + table=table, + user=user, + create_options=False, + ownership_type=RestrictedViewOwnershipType.type, + ) + enterprise_data_fixture.create_grid_view_field_option( + grid, visible_field, hidden=False + ) + enterprise_data_fixture.create_grid_view_field_option( + grid, hidden_field, hidden=True + ) + + admin_role = Role.objects.get(uid="ADMIN") + no_access_role = Role.objects.get(uid="NO_ACCESS") + workspace = table.database.workspace + RoleAssignmentHandler().assign_role( + user2, workspace, role=no_access_role, scope=workspace + ) + RoleAssignmentHandler().assign_role(user2, workspace, role=admin_role, scope=table) + + # Admin sees all fields even hidden ones. + url = reverse("api:database:fields:list", kwargs={"table_id": table.id}) + response = api_client.get( + url + f"?view={grid.id}", + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + response_json = response.json() + assert response.status_code == HTTP_200_OK + assert len(response_json) == 2 + + +@pytest.mark.django_db +@override_settings(DEBUG=True) +def test_fetching_restricted_view_fields_view_does_not_belong_to_table( + enterprise_data_fixture, + api_client, +): + enterprise_data_fixture.enable_enterprise() + + user, token = enterprise_data_fixture.create_user_and_token() + user2, token2 = enterprise_data_fixture.create_user_and_token() + workspace = enterprise_data_fixture.create_workspace(user=user, members=[user2]) + database = enterprise_data_fixture.create_database_application(workspace=workspace) + table = enterprise_data_fixture.create_database_table(database=database) + table2 = enterprise_data_fixture.create_database_table(database=database) + visible_field = enterprise_data_fixture.create_text_field(table=table, primary=True) + + grid = enterprise_data_fixture.create_grid_view( + table=table2, + user=user, + create_options=False, + ownership_type=RestrictedViewOwnershipType.type, + ) + enterprise_data_fixture.create_grid_view_field_option( + grid, visible_field, hidden=False + ) + + editor_role = Role.objects.get(uid="EDITOR") + no_access_role = Role.objects.get(uid="NO_ACCESS") + workspace = table.database.workspace + RoleAssignmentHandler().assign_role( + user2, workspace, role=no_access_role, scope=workspace + ) + RoleAssignmentHandler().assign_role( + user2, workspace, role=editor_role, scope=View.objects.get(pk=grid.id) + ) + + # View belongs to a different table — should return 404. + url = reverse("api:database:fields:list", kwargs={"table_id": table.id}) + response = api_client.get( + url + f"?view={grid.id}", + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + response_json = response.json() + assert response.status_code == HTTP_404_NOT_FOUND + assert response_json["error"] == "ERROR_VIEW_DOES_NOT_EXIST" + + +@pytest.mark.django_db +@override_settings(DEBUG=True) +def test_hidden_fields_excluded_for_kanban_view_editor( + enterprise_data_fixture, premium_data_fixture, api_client +): + enterprise_data_fixture.enable_enterprise() + + user, token = enterprise_data_fixture.create_user_and_token() + user2, token2 = enterprise_data_fixture.create_user_and_token() + workspace = enterprise_data_fixture.create_workspace(user=user, members=[user2]) + database = enterprise_data_fixture.create_database_application(workspace=workspace) + table = enterprise_data_fixture.create_database_table(database=database) + visible_field = enterprise_data_fixture.create_text_field(table=table, primary=True) + hidden_field = enterprise_data_fixture.create_text_field(table=table) + + RowHandler().create_row( + user, + table, + values={ + f"field_{visible_field.id}": "vis", + f"field_{hidden_field.id}": "hid", + }, + ) + + view = premium_data_fixture.create_kanban_view( + table=table, ownership_type=RestrictedViewOwnershipType.type + ) + _set_field_hidden(view, hidden_field, visible_fields=[visible_field]) + + editor_role = Role.objects.get(uid="EDITOR") + no_access_role = Role.objects.get(uid="NO_ACCESS") + RoleAssignmentHandler().assign_role( + user2, workspace, role=no_access_role, scope=workspace + ) + RoleAssignmentHandler().assign_role( + user2, + workspace, + role=editor_role, + scope=View.objects.get(id=view.id), + ) + + response = api_client.get( + reverse("api:database:views:kanban:list", kwargs={"view_id": view.id}) + + "?include=field_options", + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + assert response.status_code == HTTP_200_OK + response_json = response.json() + + # Kanban groups rows under select option keys. Check any group's first row. + for key, group in response_json.get("rows", {}).items(): + for row in group.get("results", []): + assert f"field_{hidden_field.id}" not in row, ( + "Editor should not see hidden field in kanban row" + ) + assert f"field_{visible_field.id}" in row, ( + "Editor should see visible field in kanban row" + ) + + field_options = response_json.get("field_options", {}) + assert str(hidden_field.id) not in field_options, ( + "Editor should not see hidden field options in kanban" + ) + assert str(visible_field.id) in field_options, ( + "Editor should see visible field options in kanban" + ) + + +@pytest.mark.django_db +@override_settings(DEBUG=True) +def test_hidden_fields_excluded_for_calendar_view_editor( + enterprise_data_fixture, premium_data_fixture, api_client +): + enterprise_data_fixture.enable_enterprise() + + user, token = enterprise_data_fixture.create_user_and_token() + user2, token2 = enterprise_data_fixture.create_user_and_token() + workspace = enterprise_data_fixture.create_workspace(user=user, members=[user2]) + database = enterprise_data_fixture.create_database_application(workspace=workspace) + table = enterprise_data_fixture.create_database_table(database=database) + visible_field = enterprise_data_fixture.create_text_field(table=table, primary=True) + hidden_field = enterprise_data_fixture.create_text_field(table=table) + + view = premium_data_fixture.create_calendar_view( + table=table, ownership_type=RestrictedViewOwnershipType.type + ) + _set_field_hidden(view, hidden_field, visible_fields=[visible_field]) + + # Fill date field so the calendar has rows in the queried range. + date_field = view.date_field + model = table.get_model() + RowHandler().create_row( + user, + table, + values={ + f"field_{visible_field.id}": "vis", + f"field_{hidden_field.id}": "hid", + f"field_{date_field.id}": "2021-01-15", + }, + ) + + editor_role = Role.objects.get(uid="EDITOR") + no_access_role = Role.objects.get(uid="NO_ACCESS") + RoleAssignmentHandler().assign_role( + user2, workspace, role=no_access_role, scope=workspace + ) + RoleAssignmentHandler().assign_role( + user2, + workspace, + role=editor_role, + scope=View.objects.get(id=view.id), + ) + + response = api_client.get( + reverse("api:database:views:calendar:list", kwargs={"view_id": view.id}) + + "?include=field_options&from_timestamp=2021-01-01&to_timestamp=2021-02-01", + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + assert response.status_code == HTTP_200_OK + response_json = response.json() + + # Calendar groups rows by date. Check each group's rows. + for key, group in response_json.get("rows", {}).items(): + for row in group.get("results", []): + assert f"field_{hidden_field.id}" not in row, ( + "Editor should not see hidden field in calendar row" + ) + assert f"field_{visible_field.id}" in row, ( + "Editor should see visible field in calendar row" + ) + + field_options = response_json.get("field_options", {}) + assert str(hidden_field.id) not in field_options, ( + "Editor should not see hidden field options in calendar" + ) + assert str(visible_field.id) in field_options, ( + "Editor should see visible field options in calendar" + ) + + +@pytest.mark.django_db +@override_settings(DEBUG=True) +def test_grid_view_filter_endpoint_excludes_hidden_fields( + enterprise_data_fixture, api_client +): + enterprise_data_fixture.enable_enterprise() + + user, token = enterprise_data_fixture.create_user_and_token() + user2, token2 = enterprise_data_fixture.create_user_and_token() + workspace = enterprise_data_fixture.create_workspace(user=user, members=[user2]) + database = enterprise_data_fixture.create_database_application(workspace=workspace) + table = enterprise_data_fixture.create_database_table(database=database) + visible_field = enterprise_data_fixture.create_text_field(table=table, primary=True) + hidden_field = enterprise_data_fixture.create_text_field(table=table) + + row = RowHandler().create_row( + user, + table, + values={ + f"field_{visible_field.id}": "vis", + f"field_{hidden_field.id}": "secret", + }, + ) + + view = enterprise_data_fixture.create_grid_view( + table=table, ownership_type=RestrictedViewOwnershipType.type + ) + GridViewFieldOptions.objects.update_or_create( + grid_view=view, field=hidden_field, defaults={"hidden": True} + ) + + editor_role = Role.objects.get(uid="EDITOR") + no_access_role = Role.objects.get(uid="NO_ACCESS") + RoleAssignmentHandler().assign_role( + user2, workspace, role=no_access_role, scope=workspace + ) + RoleAssignmentHandler().assign_role( + user2, + workspace, + role=editor_role, + scope=View.objects.get(id=view.id), + ) + + # The POST filter endpoint fetches specific rows/fields. + response = api_client.post( + reverse("api:database:views:grid:list", kwargs={"view_id": view.id}), + {"row_ids": [row.id], "field_ids": [visible_field.id, hidden_field.id]}, + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + assert response.status_code == HTTP_200_OK + response_json = response.json() + assert len(response_json) == 1 + assert f"field_{hidden_field.id}" not in response_json[0] + assert f"field_{visible_field.id}" in response_json[0] + + +@pytest.mark.django_db +@override_settings(DEBUG=True) +@pytest.mark.parametrize("role_uid", ["VIEWER", "COMMENTER"]) +def test_hidden_fields_excluded_from_field_listing_for_all_lower_roles( + enterprise_data_fixture, api_client, role_uid +): + enterprise_data_fixture.enable_enterprise() + + user, token = enterprise_data_fixture.create_user_and_token() + user2, token2 = enterprise_data_fixture.create_user_and_token() + workspace = enterprise_data_fixture.create_workspace(user=user, members=[user2]) + database = enterprise_data_fixture.create_database_application(workspace=workspace) + table = enterprise_data_fixture.create_database_table(database=database) + visible_field = enterprise_data_fixture.create_text_field(table=table, primary=True) + hidden_field = enterprise_data_fixture.create_text_field(table=table) + + grid = enterprise_data_fixture.create_grid_view( + table=table, + user=user, + create_options=False, + ownership_type=RestrictedViewOwnershipType.type, + ) + enterprise_data_fixture.create_grid_view_field_option( + grid, visible_field, hidden=False + ) + enterprise_data_fixture.create_grid_view_field_option( + grid, hidden_field, hidden=True + ) + + role = Role.objects.get(uid=role_uid) + no_access_role = Role.objects.get(uid="NO_ACCESS") + RoleAssignmentHandler().assign_role( + user2, workspace, role=no_access_role, scope=workspace + ) + RoleAssignmentHandler().assign_role( + user2, workspace, role=role, scope=View.objects.get(pk=grid.id) + ) + + url = reverse("api:database:fields:list", kwargs={"table_id": table.id}) + response = api_client.get( + url + f"?view={grid.id}", + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + assert response.status_code == HTTP_200_OK + field_ids = {f["id"] for f in response.json()} + assert visible_field.id in field_ids + assert hidden_field.id not in field_ids + + +@pytest.mark.django_db +@override_settings(DEBUG=True) +def test_hidden_field_row_values_not_leaked_in_grid_view( + enterprise_data_fixture, api_client +): + enterprise_data_fixture.enable_enterprise() + + user, token = enterprise_data_fixture.create_user_and_token() + user2, token2 = enterprise_data_fixture.create_user_and_token() + workspace = enterprise_data_fixture.create_workspace(user=user, members=[user2]) + database = enterprise_data_fixture.create_database_application(workspace=workspace) + table = enterprise_data_fixture.create_database_table(database=database) + visible_field = enterprise_data_fixture.create_text_field(table=table, primary=True) + hidden_field = enterprise_data_fixture.create_text_field(table=table) + + view = enterprise_data_fixture.create_grid_view( + table=table, ownership_type=RestrictedViewOwnershipType.type + ) + GridViewFieldOptions.objects.update_or_create( + grid_view=view, field=hidden_field, defaults={"hidden": True} + ) + + RowHandler().create_row( + user, + table, + values={ + f"field_{visible_field.id}": "public", + f"field_{hidden_field.id}": "secret", + }, + ) + RowHandler().create_row( + user, + table, + values={ + f"field_{visible_field.id}": "public2", + f"field_{hidden_field.id}": "secret2", + }, + ) + + editor_role = Role.objects.get(uid="EDITOR") + no_access_role = Role.objects.get(uid="NO_ACCESS") + RoleAssignmentHandler().assign_role( + user2, workspace, role=no_access_role, scope=workspace + ) + RoleAssignmentHandler().assign_role( + user2, + workspace, + role=editor_role, + scope=View.objects.get(id=view.id), + ) + + response = api_client.get( + reverse("api:database:views:grid:list", kwargs={"view_id": view.id}), + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + assert response.status_code == HTTP_200_OK + rows = response.json()["results"] + assert len(rows) == 2 + for row in rows: + assert f"field_{hidden_field.id}" not in row, ( + "Hidden field value must not appear in row response" + ) + assert "secret" not in str(row), ( + "Hidden field value must not leak anywhere in the row" + ) + assert f"field_{visible_field.id}" in row + + +@pytest.mark.django_db +@override_settings(DEBUG=True) +def test_hidden_field_aggregation_excluded_for_editor( + enterprise_data_fixture, api_client +): + enterprise_data_fixture.enable_enterprise() + + user, token = enterprise_data_fixture.create_user_and_token() + user2, token2 = enterprise_data_fixture.create_user_and_token() + workspace = enterprise_data_fixture.create_workspace(user=user, members=[user2]) + database = enterprise_data_fixture.create_database_application(workspace=workspace) + table = enterprise_data_fixture.create_database_table(database=database) + visible_field = enterprise_data_fixture.create_number_field(table=table) + hidden_field = enterprise_data_fixture.create_number_field(table=table) + + view = enterprise_data_fixture.create_grid_view( + table=table, ownership_type=RestrictedViewOwnershipType.type + ) + GridViewFieldOptions.objects.update_or_create( + grid_view=view, + field=hidden_field, + defaults={ + "hidden": True, + "aggregation_type": "sum", + "aggregation_raw_type": "sum", + }, + ) + GridViewFieldOptions.objects.update_or_create( + grid_view=view, + field=visible_field, + defaults={ + "hidden": False, + "aggregation_type": "sum", + "aggregation_raw_type": "sum", + }, + ) + + RowHandler().create_row( + user, + table, + values={ + f"field_{visible_field.id}": 10, + f"field_{hidden_field.id}": 99, + }, + ) + + editor_role = Role.objects.get(uid="EDITOR") + no_access_role = Role.objects.get(uid="NO_ACCESS") + RoleAssignmentHandler().assign_role( + user2, workspace, role=no_access_role, scope=workspace + ) + RoleAssignmentHandler().assign_role( + user2, + workspace, + role=editor_role, + scope=View.objects.get(id=view.id), + ) + + response = api_client.get( + reverse( + "api:database:views:grid:field-aggregations", + kwargs={"view_id": view.id}, + ), + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + assert response.status_code == HTTP_200_OK + response_json = response.json() + # Visible field aggregation should be present. + assert f"field_{visible_field.id}" in response_json + # Hidden field aggregation must not leak. + assert f"field_{hidden_field.id}" not in response_json + + +@pytest.mark.django_db +@override_settings(DEBUG=True) +def test_search_does_not_match_hidden_fields_for_editor( + enterprise_data_fixture, api_client +): + enterprise_data_fixture.enable_enterprise() + + user, token = enterprise_data_fixture.create_user_and_token() + user2, token2 = enterprise_data_fixture.create_user_and_token() + workspace = enterprise_data_fixture.create_workspace(user=user, members=[user2]) + database = enterprise_data_fixture.create_database_application(workspace=workspace) + table = enterprise_data_fixture.create_database_table(database=database) + visible_field = enterprise_data_fixture.create_text_field(table=table, primary=True) + hidden_field = enterprise_data_fixture.create_text_field(table=table) + + RowHandler().create_row( + user, + table, + values={ + f"field_{visible_field.id}": "public", + f"field_{hidden_field.id}": "uniquesecret", + }, + ) + + view = enterprise_data_fixture.create_grid_view( + table=table, ownership_type=RestrictedViewOwnershipType.type + ) + GridViewFieldOptions.objects.update_or_create( + grid_view=view, field=hidden_field, defaults={"hidden": True} + ) + + editor_role = Role.objects.get(uid="EDITOR") + no_access_role = Role.objects.get(uid="NO_ACCESS") + RoleAssignmentHandler().assign_role( + user2, workspace, role=no_access_role, scope=workspace + ) + RoleAssignmentHandler().assign_role( + user2, + workspace, + role=editor_role, + scope=View.objects.get(id=view.id), + ) + + # Editor searches for a value only present in the hidden field. + response = api_client.get( + reverse("api:database:views:grid:list", kwargs={"view_id": view.id}) + + "?search=uniquesecret", + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + assert response.status_code == HTTP_200_OK + assert response.json()["count"] == 0, ( + "Editor should not find rows by hidden field value" + ) + + # Admin can still find the row by searching the hidden field value. + response = api_client.get( + reverse("api:database:views:grid:list", kwargs={"view_id": view.id}) + + "?search=uniquesecret", + format="json", + HTTP_AUTHORIZATION=f"JWT {token}", + ) + assert response.status_code == HTTP_200_OK + assert response.json()["count"] == 1, "Admin should find rows by hidden field value" + + +@pytest.mark.django_db +@override_settings(DEBUG=True) +def test_sorts_on_hidden_fields_excluded_for_editor( + enterprise_data_fixture, api_client +): + enterprise_data_fixture.enable_enterprise() + + user, token = enterprise_data_fixture.create_user_and_token() + user2, token2 = enterprise_data_fixture.create_user_and_token() + workspace = enterprise_data_fixture.create_workspace(user=user, members=[user2]) + database = enterprise_data_fixture.create_database_application(workspace=workspace) + table = enterprise_data_fixture.create_database_table(database=database) + visible_field = enterprise_data_fixture.create_text_field(table=table, primary=True) + hidden_field = enterprise_data_fixture.create_text_field(table=table) + + view = enterprise_data_fixture.create_grid_view( + table=table, ownership_type=RestrictedViewOwnershipType.type + ) + GridViewFieldOptions.objects.update_or_create( + grid_view=view, field=hidden_field, defaults={"hidden": True} + ) + + # Create sorts: one on hidden field, one on visible field. + ViewSort.objects.create(view=view, field=hidden_field, order=0) + ViewSort.objects.create(view=view, field=visible_field, order=1) + + editor_role = Role.objects.get(uid="EDITOR") + no_access_role = Role.objects.get(uid="NO_ACCESS") + RoleAssignmentHandler().assign_role( + user2, workspace, role=no_access_role, scope=workspace + ) + RoleAssignmentHandler().assign_role( + user2, + workspace, + role=editor_role, + scope=View.objects.get(id=view.id), + ) + + # Editor lists views with sortings included. + response = api_client.get( + reverse("api:database:views:list", kwargs={"table_id": table.id}) + + "?include=sortings", + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + assert response.status_code == HTTP_200_OK + views_json = response.json() + target_view = [v for v in views_json if v["id"] == view.id][0] + sort_fields = [s["field"] for s in target_view["sortings"]] + assert hidden_field.id not in sort_fields, ( + "Editor should not see sort on hidden field" + ) + assert visible_field.id in sort_fields, "Editor should see sort on visible field" + + # Admin sees all sorts. + response = api_client.get( + reverse("api:database:views:list", kwargs={"table_id": table.id}) + + "?include=sortings", + format="json", + HTTP_AUTHORIZATION=f"JWT {token}", + ) + assert response.status_code == HTTP_200_OK + views_json = response.json() + target_view = [v for v in views_json if v["id"] == view.id][0] + sort_fields = [s["field"] for s in target_view["sortings"]] + assert hidden_field.id in sort_fields, "Admin should see sort on hidden field" + assert visible_field.id in sort_fields, "Admin should see sort on visible field" + + +@pytest.mark.django_db +@override_settings(DEBUG=True) +def test_group_bys_on_hidden_fields_excluded_for_editor( + enterprise_data_fixture, api_client +): + enterprise_data_fixture.enable_enterprise() + + user, token = enterprise_data_fixture.create_user_and_token() + user2, token2 = enterprise_data_fixture.create_user_and_token() + workspace = enterprise_data_fixture.create_workspace(user=user, members=[user2]) + database = enterprise_data_fixture.create_database_application(workspace=workspace) + table = enterprise_data_fixture.create_database_table(database=database) + visible_field = enterprise_data_fixture.create_text_field(table=table, primary=True) + hidden_field = enterprise_data_fixture.create_text_field(table=table) + + view = enterprise_data_fixture.create_grid_view( + table=table, ownership_type=RestrictedViewOwnershipType.type + ) + GridViewFieldOptions.objects.update_or_create( + grid_view=view, field=hidden_field, defaults={"hidden": True} + ) + + # Create group bys: one on hidden field, one on visible field. + ViewGroupBy.objects.create(view=view, field=hidden_field, order=0) + ViewGroupBy.objects.create(view=view, field=visible_field, order=1) + + editor_role = Role.objects.get(uid="EDITOR") + no_access_role = Role.objects.get(uid="NO_ACCESS") + RoleAssignmentHandler().assign_role( + user2, workspace, role=no_access_role, scope=workspace + ) + RoleAssignmentHandler().assign_role( + user2, + workspace, + role=editor_role, + scope=View.objects.get(id=view.id), + ) + + # Editor lists views with group_bys included. + response = api_client.get( + reverse("api:database:views:list", kwargs={"table_id": table.id}) + + "?include=group_bys", + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + assert response.status_code == HTTP_200_OK + views_json = response.json() + target_view = [v for v in views_json if v["id"] == view.id][0] + group_by_fields = [g["field"] for g in target_view["group_bys"]] + assert hidden_field.id not in group_by_fields, ( + "Editor should not see group by on hidden field" + ) + assert visible_field.id in group_by_fields, ( + "Editor should see group by on visible field" + ) + + # Admin sees all group bys. + response = api_client.get( + reverse("api:database:views:list", kwargs={"table_id": table.id}) + + "?include=group_bys", + format="json", + HTTP_AUTHORIZATION=f"JWT {token}", + ) + assert response.status_code == HTTP_200_OK + views_json = response.json() + target_view = [v for v in views_json if v["id"] == view.id][0] + group_by_fields = [g["field"] for g in target_view["group_bys"]] + assert hidden_field.id in group_by_fields, ( + "Admin should see group by on hidden field" + ) + assert visible_field.id in group_by_fields, ( + "Admin should see group by on visible field" + ) + + +@pytest.mark.django_db +@override_settings(DEBUG=True) +def test_decorations_excluded_for_editor(enterprise_data_fixture, api_client): + enterprise_data_fixture.enable_enterprise() + + user, token = enterprise_data_fixture.create_user_and_token() + user2, token2 = enterprise_data_fixture.create_user_and_token() + workspace = enterprise_data_fixture.create_workspace(user=user, members=[user2]) + database = enterprise_data_fixture.create_database_application(workspace=workspace) + table = enterprise_data_fixture.create_database_table(database=database) + visible_field = enterprise_data_fixture.create_text_field(table=table, primary=True) + hidden_field = enterprise_data_fixture.create_text_field(table=table) + + view = enterprise_data_fixture.create_grid_view( + table=table, ownership_type=RestrictedViewOwnershipType.type + ) + GridViewFieldOptions.objects.update_or_create( + grid_view=view, field=hidden_field, defaults={"hidden": True} + ) + + # Create a decoration on the view. + ViewDecoration.objects.create( + view=view, + type="left_border_color", + value_provider_type="conditional_color", + value_provider_conf={ + "colors": [ + { + "filters": [ + {"field": hidden_field.id, "type": "equal", "value": "test"} + ], + "color": "red", + } + ] + }, + order=0, + ) + + editor_role = Role.objects.get(uid="EDITOR") + no_access_role = Role.objects.get(uid="NO_ACCESS") + RoleAssignmentHandler().assign_role( + user2, workspace, role=no_access_role, scope=workspace + ) + RoleAssignmentHandler().assign_role( + user2, + workspace, + role=editor_role, + scope=View.objects.get(id=view.id), + ) + + # Editor lists views with decorations included. + response = api_client.get( + reverse("api:database:views:list", kwargs={"table_id": table.id}) + + "?include=decorations", + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + assert response.status_code == HTTP_200_OK + views_json = response.json() + target_view = [v for v in views_json if v["id"] == view.id][0] + assert len(target_view["decorations"]) == 0, "Editor should not see any decorations" + + # Admin sees decorations. + response = api_client.get( + reverse("api:database:views:list", kwargs={"table_id": table.id}) + + "?include=decorations", + format="json", + HTTP_AUTHORIZATION=f"JWT {token}", + ) + assert response.status_code == HTTP_200_OK + views_json = response.json() + target_view = [v for v in views_json if v["id"] == view.id][0] + assert len(target_view["decorations"]) == 1, "Admin should see decorations" + + +@pytest.mark.django_db(transaction=True) +@patch("baserow.ws.registries.broadcast_to_channel_group") +def test_realtime_row_created_does_not_expose_hidden_field( + mock_broadcast_to_channel_group, + enterprise_data_fixture, +): + user = enterprise_data_fixture.create_user() + table = enterprise_data_fixture.create_database_table(user=user) + visible_field = enterprise_data_fixture.create_text_field(table=table) + hidden_field = enterprise_data_fixture.create_text_field(table=table) + + restricted_view = enterprise_data_fixture.create_grid_view( + table=table, + ownership_type=RestrictedViewOwnershipType.type, + public=False, + ) + GridViewFieldOptions.objects.update_or_create( + grid_view=restricted_view, field=hidden_field, defaults={"hidden": True} + ) + + row = RowHandler().create_row( + user=user, + table=table, + values={ + f"field_{visible_field.id}": "Visible", + f"field_{hidden_field.id}": "Secret", + }, + ) + + # Find the restricted-view broadcast call. + restricted_calls = [ + c + for c in mock_broadcast_to_channel_group.delay.mock_calls + if f"restricted-view-{restricted_view.id}" in str(c) + ] + assert len(restricted_calls) == 1 + + payload = restricted_calls[0].args[1] + assert payload["type"] == "rows_created" + broadcast_row = payload["rows"][0] + assert f"field_{visible_field.id}" in broadcast_row + assert broadcast_row[f"field_{visible_field.id}"] == "Visible" + assert f"field_{hidden_field.id}" not in broadcast_row, ( + "Hidden field value must not be included in the restricted view WS event" + ) + + +@pytest.mark.django_db(transaction=True) +@patch("baserow.ws.registries.broadcast_to_channel_group") +def test_realtime_row_updated_does_not_expose_hidden_field( + mock_broadcast_to_channel_group, + enterprise_data_fixture, +): + user = enterprise_data_fixture.create_user() + table = enterprise_data_fixture.create_database_table(user=user) + visible_field = enterprise_data_fixture.create_text_field(table=table) + hidden_field = enterprise_data_fixture.create_text_field(table=table) + + restricted_view = enterprise_data_fixture.create_grid_view( + table=table, + ownership_type=RestrictedViewOwnershipType.type, + public=False, + ) + GridViewFieldOptions.objects.update_or_create( + grid_view=restricted_view, field=hidden_field, defaults={"hidden": True} + ) + + row = RowHandler().create_row( + user=user, + table=table, + values={ + f"field_{visible_field.id}": "Visible", + f"field_{hidden_field.id}": "Secret", + }, + ) + + mock_broadcast_to_channel_group.delay.reset_mock() + + RowHandler().update_row_by_id( + user=user, + table=table, + row_id=row.id, + values={ + f"field_{visible_field.id}": "Updated", + f"field_{hidden_field.id}": "StillSecret", + }, + ) + + # Find the restricted-view broadcast call. + restricted_calls = [ + c + for c in mock_broadcast_to_channel_group.delay.mock_calls + if f"restricted-view-{restricted_view.id}" in str(c) + ] + assert len(restricted_calls) == 1 + + payload = restricted_calls[0].args[1] + assert payload["type"] == "rows_updated" + + # Check the updated row payload. + broadcast_row = payload["rows"][0] + assert f"field_{visible_field.id}" in broadcast_row + assert broadcast_row[f"field_{visible_field.id}"] == "Updated" + assert f"field_{hidden_field.id}" not in broadcast_row, ( + "Hidden field value must not be included in the restricted view WS update event" + ) + + # Check the before-update row payload. + old_row = payload["rows_before_update"][0] + assert f"field_{visible_field.id}" in old_row + assert old_row[f"field_{visible_field.id}"] == "Visible" + assert f"field_{hidden_field.id}" not in old_row, ( + "Hidden field value must not be in rows_before_update of the restricted view " + "WS event" + ) + + +@pytest.mark.django_db +@patch("baserow.ws.registries.broadcast_to_channel_group") +def test_broadcast_payload_to_all_restricted_views_no_n_plus_one_queries( + mock_broadcast_to_channel_group, + enterprise_data_fixture, + premium_data_fixture, + django_assert_num_queries, +): + """ + Test that _broadcast_payload_to_all_restricted_views does not issue N+1 + queries when checking hidden fields across multiple restricted views. + All view types except form are tested. + """ + + enterprise_data_fixture.enable_enterprise() + user = enterprise_data_fixture.create_user() + table = enterprise_data_fixture.create_database_table(user=user) + visible_field = enterprise_data_fixture.create_text_field(table=table) + hidden_field = enterprise_data_fixture.create_text_field(table=table) + + restricted = RestrictedViewOwnershipType.type + num_views_per_type = 2 + + # Grid views + for _ in range(num_views_per_type): + view = enterprise_data_fixture.create_grid_view( + user, table=table, ownership_type=restricted + ) + enterprise_data_fixture.create_grid_view_field_option( + view, visible_field, hidden=False, order=1 + ) + enterprise_data_fixture.create_grid_view_field_option( + view, hidden_field, hidden=True, order=2 + ) + + # Gallery views + for _ in range(num_views_per_type): + view = enterprise_data_fixture.create_gallery_view( + user, table=table, ownership_type=restricted, create_options=False + ) + enterprise_data_fixture.create_gallery_view_field_option( + view, visible_field, hidden=False, order=1 + ) + enterprise_data_fixture.create_gallery_view_field_option( + view, hidden_field, hidden=True, order=2 + ) + + # Kanban views + single_select_field = enterprise_data_fixture.create_single_select_field( + table=table + ) + for _ in range(num_views_per_type): + view = premium_data_fixture.create_kanban_view( + table=table, + ownership_type=restricted, + single_select_field=single_select_field, + create_options=False, + ) + premium_data_fixture.create_kanban_view_field_option( + view, visible_field, hidden=False, order=1 + ) + premium_data_fixture.create_kanban_view_field_option( + view, hidden_field, hidden=True, order=2 + ) + + # Calendar views + date_field = enterprise_data_fixture.create_date_field(table=table) + for _ in range(num_views_per_type): + view = premium_data_fixture.create_calendar_view( + table=table, + ownership_type=restricted, + date_field=date_field, + create_options=False, + ) + premium_data_fixture.create_calendar_view_field_option( + view, visible_field, hidden=False, order=1 + ) + premium_data_fixture.create_calendar_view_field_option( + view, hidden_field, hidden=True, order=2 + ) + + # Timeline views + start_date_field = enterprise_data_fixture.create_date_field(table=table) + end_date_field = enterprise_data_fixture.create_date_field(table=table) + for _ in range(num_views_per_type): + view = premium_data_fixture.create_timeline_view( + table=table, + ownership_type=restricted, + start_date_field=start_date_field, + end_date_field=end_date_field, + create_options=False, + ) + premium_data_fixture.create_timeline_view_field_option( + view, visible_field, hidden=False, order=1 + ) + premium_data_fixture.create_timeline_view_field_option( + view, hidden_field, hidden=True, order=2 + ) + + total_views = num_views_per_type * 5 + payload = {"type": "field_created", "field": {"id": visible_field.id}} + + # The query count should be constant regardless of the number of views. + # We expect: + # 1. Base View query (with content_type select_related) + # 2-3. Prefetch for table__field_set (table lookup + field_set lookup) + # 4-13. One query per content type (5 types) to fetch specific view subclass + # rows + one prefetch query per content type for the field options + # Total: 1 (base) + 2 (table + field_set) + 5 (specific) + 5 (options) = 13 + with django_assert_num_queries(13): + _broadcast_payload_to_all_restricted_views( + user, table.id, payload, field_id=visible_field.id + ) + + assert mock_broadcast_to_channel_group.delay.call_count == total_views + + mock_broadcast_to_channel_group.delay.reset_mock() + + # Now test with a hidden field — no broadcasts should be made, same query count. + payload_hidden = {"type": "field_created", "field": {"id": hidden_field.id}} + with django_assert_num_queries(13): + _broadcast_payload_to_all_restricted_views( + user, table.id, payload_hidden, field_id=hidden_field.id + ) + + assert mock_broadcast_to_channel_group.delay.call_count == 0 + + +@pytest.mark.django_db +@override_settings(DEBUG=True) +def test_editor_row_endpoints_exclude_hidden_fields_in_response( + api_client, enterprise_data_fixture +): + enterprise_data_fixture.enable_enterprise() + + user, token = enterprise_data_fixture.create_user_and_token() + user2, token2 = enterprise_data_fixture.create_user_and_token() + workspace = enterprise_data_fixture.create_workspace(user=user, members=[user2]) + database = enterprise_data_fixture.create_database_application(workspace=workspace) + table = enterprise_data_fixture.create_database_table(database=database) + visible_field = enterprise_data_fixture.create_text_field(table=table, primary=True) + hidden_field = enterprise_data_fixture.create_text_field(table=table) + + view = enterprise_data_fixture.create_grid_view( + table=table, ownership_type=RestrictedViewOwnershipType.type + ) + GridViewFieldOptions.objects.update_or_create( + grid_view=view, field=hidden_field, defaults={"hidden": True} + ) + + row = RowHandler().create_row( + user, + table, + values={ + f"field_{visible_field.id}": "vis", + f"field_{hidden_field.id}": "hid", + }, + ) + + editor_role = Role.objects.get(uid="EDITOR") + no_access_role = Role.objects.get(uid="NO_ACCESS") + workspace = table.database.workspace + RoleAssignmentHandler().assign_role( + user2, workspace, role=no_access_role, scope=workspace + ) + RoleAssignmentHandler().assign_role( + user2, + workspace, + role=editor_role, + scope=View.objects.get(id=view.id), + ) + + # GET single row - editor should not see hidden field. + response = api_client.get( + reverse( + "api:database:rows:item", + kwargs={"table_id": table.id, "row_id": row.id}, + ) + + f"?view={view.id}", + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + assert response.status_code == HTTP_200_OK + response_json = response.json() + assert f"field_{visible_field.id}" in response_json + assert f"field_{hidden_field.id}" not in response_json + + # UPDATE single row - editor should not see hidden field in response. + response = api_client.patch( + reverse( + "api:database:rows:item", + kwargs={"table_id": table.id, "row_id": row.id}, + ) + + f"?view={view.id}", + {f"field_{visible_field.id}": "updated"}, + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + assert response.status_code == HTTP_200_OK + response_json = response.json() + assert f"field_{visible_field.id}" in response_json + assert response_json[f"field_{visible_field.id}"] == "updated" + assert f"field_{hidden_field.id}" not in response_json + + # CREATE single row - editor should not see hidden field in response. + response = api_client.post( + reverse( + "api:database:rows:list", + kwargs={"table_id": table.id}, + ) + + f"?view={view.id}", + {f"field_{visible_field.id}": "new_val"}, + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + assert response.status_code == HTTP_200_OK, response.json() + response_json = response.json() + assert f"field_{visible_field.id}" in response_json + assert f"field_{hidden_field.id}" not in response_json + + # BATCH CREATE rows - editor should not see hidden field in response. + response = api_client.post( + reverse( + "api:database:rows:batch", + kwargs={"table_id": table.id}, + ) + + f"?view={view.id}", + {"items": [{f"field_{visible_field.id}": "batch_val1"}]}, + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + assert response.status_code == HTTP_200_OK, response.json() + response_json = response.json() + row_data = response_json["items"][0] + assert f"field_{visible_field.id}" in row_data + assert f"field_{hidden_field.id}" not in row_data + + # BATCH UPDATE rows - editor should not see hidden field in response. + response = api_client.patch( + reverse( + "api:database:rows:batch", + kwargs={"table_id": table.id}, + ) + + f"?view={view.id}", + {"items": [{"id": row.id, f"field_{visible_field.id}": "batch_updated"}]}, + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + assert response.status_code == HTTP_200_OK, response.json() + response_json = response.json() + row_data = response_json["items"][0] + assert f"field_{visible_field.id}" in row_data + assert row_data[f"field_{visible_field.id}"] == "batch_updated" + assert f"field_{hidden_field.id}" not in row_data + + # GET ADJACENT row - editor should not see hidden field in response. + response = api_client.get( + reverse( + "api:database:rows:adjacent", + kwargs={"table_id": table.id, "row_id": row.id}, + ) + + f"?view_id={view.id}", + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + assert response.status_code == HTTP_200_OK, response.json() + response_json = response.json() + assert f"field_{visible_field.id}" in response_json + assert f"field_{hidden_field.id}" not in response_json + + +@pytest.mark.django_db +@override_settings(DEBUG=True) +def test_editor_adjacent_row_requires_view_and_excludes_hidden_fields( + api_client, enterprise_data_fixture +): + enterprise_data_fixture.enable_enterprise() + + user, token = enterprise_data_fixture.create_user_and_token() + user2, token2 = enterprise_data_fixture.create_user_and_token() + workspace = enterprise_data_fixture.create_workspace(user=user, members=[user2]) + database = enterprise_data_fixture.create_database_application(workspace=workspace) + table = enterprise_data_fixture.create_database_table(database=database) + visible_field = enterprise_data_fixture.create_text_field(table=table, primary=True) + hidden_field = enterprise_data_fixture.create_text_field(table=table) + + view = enterprise_data_fixture.create_grid_view( + table=table, ownership_type=RestrictedViewOwnershipType.type + ) + GridViewFieldOptions.objects.update_or_create( + grid_view=view, field=hidden_field, defaults={"hidden": True} + ) + + row1 = RowHandler().create_row( + user, + table, + values={ + f"field_{visible_field.id}": "row1_vis", + f"field_{hidden_field.id}": "row1_hid", + }, + ) + row2 = RowHandler().create_row( + user, + table, + values={ + f"field_{visible_field.id}": "row2_vis", + f"field_{hidden_field.id}": "row2_hid", + }, + ) + + editor_role = Role.objects.get(uid="EDITOR") + no_access_role = Role.objects.get(uid="NO_ACCESS") + workspace = table.database.workspace + RoleAssignmentHandler().assign_role( + user2, workspace, role=no_access_role, scope=workspace + ) + RoleAssignmentHandler().assign_role( + user2, + workspace, + role=editor_role, + scope=View.objects.get(id=view.id), + ) + + # Without view_id, the editor should NOT have access (no table-level perm). + response = api_client.get( + reverse( + "api:database:rows:adjacent", + kwargs={"table_id": table.id, "row_id": row1.id}, + ), + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + assert response.status_code == HTTP_401_UNAUTHORIZED + + # With view_id, the editor should have access and hidden fields excluded. + response = api_client.get( + reverse( + "api:database:rows:adjacent", + kwargs={"table_id": table.id, "row_id": row1.id}, + ) + + f"?view_id={view.id}", + format="json", + HTTP_AUTHORIZATION=f"JWT {token2}", + ) + assert response.status_code == HTTP_200_OK, response.json() + response_json = response.json() + assert f"field_{visible_field.id}" in response_json + assert response_json[f"field_{visible_field.id}"] == "row2_vis" + assert f"field_{hidden_field.id}" not in response_json + + # Builder should see hidden fields when using the same view. + response = api_client.get( + reverse( + "api:database:rows:adjacent", + kwargs={"table_id": table.id, "row_id": row1.id}, + ) + + f"?view_id={view.id}", + format="json", + HTTP_AUTHORIZATION=f"JWT {token}", + ) + assert response.status_code == HTTP_200_OK + response_json = response.json() + assert f"field_{visible_field.id}" in response_json + assert f"field_{hidden_field.id}" in response_json diff --git a/enterprise/web-frontend/modules/baserow_enterprise/components/assistant/AssistantPanel.vue b/enterprise/web-frontend/modules/baserow_enterprise/components/assistant/AssistantPanel.vue index b5bbf2b8f0..a03f93b41f 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/components/assistant/AssistantPanel.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/components/assistant/AssistantPanel.vue @@ -189,6 +189,24 @@ export default { workspaceId: this.workspace.id, }, }) + } else if (newLocation.type === 'builder-page') { + waitFor(() => { + const builder = store.getters['application/get']( + newLocation.application_id + ) + return ( + builder && + builder.pages.find((page) => page.id === newLocation.page_id) + ) + }).then(() => { + router.push({ + name: 'builder-page', + params: { + builderId: newLocation.application_id, + pageId: newLocation.page_id, + }, + }) + }) } else if (newLocation.type === 'automation-workflow') { waitFor(() => { const automation = store.getters['application/get']( diff --git a/enterprise/web-frontend/modules/baserow_enterprise/components/assistant/AssistantUiContext.vue b/enterprise/web-frontend/modules/baserow_enterprise/components/assistant/AssistantUiContext.vue index 145c87101c..7a5be79af2 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/components/assistant/AssistantUiContext.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/components/assistant/AssistantUiContext.vue @@ -30,6 +30,8 @@ export default { return this.uiContext.table.name } else if (this.uiContext.workflow) { return this.uiContext.workflow.name + } else if (this.uiContext.page) { + return this.uiContext.page.name } else if (this.uiContext.application) { return this.uiContext.application.name } else if (this.uiContext.workspace) { diff --git a/enterprise/web-frontend/modules/baserow_enterprise/store/assistant.js b/enterprise/web-frontend/modules/baserow_enterprise/store/assistant.js index c6b148eebe..d8aca9fd1b 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/store/assistant.js +++ b/enterprise/web-frontend/modules/baserow_enterprise/store/assistant.js @@ -454,6 +454,16 @@ export const getters = { uiContext.workflow = { id: workflow.id, name: workflow.name } } } catch {} + + if (application?.type === 'builder') { + if (scope.page && application.pages) { + const page = application.pages.find((p) => p.id === scope.page) + if (page) { + uiContext.page = { id: page.id, name: page.name } + } + } + } + return uiContext }, diff --git a/enterprise/web-frontend/modules/baserow_enterprise/viewOwnershipTypes.js b/enterprise/web-frontend/modules/baserow_enterprise/viewOwnershipTypes.js index d9328203d6..25e1e5a60c 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/viewOwnershipTypes.js +++ b/enterprise/web-frontend/modules/baserow_enterprise/viewOwnershipTypes.js @@ -65,4 +65,93 @@ export class RestrictedViewOwnershipType extends ViewOwnershipType { payload.params = { restricted_view_id: view.id } return payload } + + fetchingFieldsRequiresViewId(database, table, view) { + const canListFields = this.app.$hasPermission( + 'database.table.list_fields', + table, + database.workspace.id + ) + // The view query parameter must be added if the user does not have permissions to + // list all the fields of the table. If the view param is added, it will only list + // the fields related to this view. + return !canListFields + } + + _canUpdateFieldOptions(view, database) { + return this.app.$hasPermission( + 'database.table.view.update_field_options', + view, + database.workspace.id + ) + } + + _getHiddenFieldIds(fields, view, storePrefix) { + const viewType = this.app.$registry.get('view', view.type) + const visibleFields = viewType.getVisibleFieldsInOrder( + { $store: this.app.$store }, + fields, + view, + storePrefix + ) + const visibleFieldIds = new Set(visibleFields.map((f) => f.id)) + return new Set( + fields.filter((f) => !visibleFieldIds.has(f.id)).map((f) => f.id) + ) + } + + getSortContextWarning(view, fields, database, storePrefix) { + // If a user has the ability to update the field options, then they can hide and + // show fields. If they don't have that ability, then this warning should never be + // shown because they can't control the hidden fields anyway. + if (!this._canUpdateFieldOptions(view, database)) { + return null + } + const viewType = this.app.$registry.get('view', view.type) + const visibleFields = viewType.getVisibleFieldsInOrder( + { $store: this.app.$store }, + fields, + view, + storePrefix + ) + const hiddenFieldIds = this._getHiddenFieldIds(fields, view, storePrefix) + if (hiddenFieldIds.size === 0) { + return null + } + if (!view.sortings.some((s) => hiddenFieldIds.has(s.field))) { + return null + } + return this.app.$i18n.t('viewSortContext.hiddenFieldWarning') + } + + getGroupByContextWarning(view, fields, database, storePrefix) { + // If a user has the ability to update the field options, then they can hide and + // show fields. If they don't have that ability, then this warning should never be + // shown because they can't control the hidden fields anyway. + if (!this._canUpdateFieldOptions(view, database)) { + return null + } + const hiddenFieldIds = this._getHiddenFieldIds(fields, view, storePrefix) + if (hiddenFieldIds.size === 0) { + return null + } + if (!view.group_bys.some((g) => hiddenFieldIds.has(g.field))) { + return null + } + return this.app.$i18n.t('viewGroupByContext.hiddenFieldWarning') + } + + getDecoratorContextWarning(view, fields, database, storePrefix) { + // If a user has the ability to update the field options, then they can hide and + // show fields. If they don't have that ability, then this warning should never be + // shown because they can't control the hidden fields anyway. + if (!this._canUpdateFieldOptions(view, database)) { + return null + } + const hiddenFieldIds = this._getHiddenFieldIds(fields, view, storePrefix) + if (hiddenFieldIds.size === 0) { + return null + } + return this.app.$i18n.t('viewDecorator.hiddenFieldWarning') + } } diff --git a/premium/backend/src/baserow_premium/api/views/calendar/views.py b/premium/backend/src/baserow_premium/api/views/calendar/views.py index 687cd2534c..5ad1366a14 100644 --- a/premium/backend/src/baserow_premium/api/views/calendar/views.py +++ b/premium/backend/src/baserow_premium/api/views/calendar/views.py @@ -44,6 +44,7 @@ ) from baserow.contrib.database.api.views.serializers import ViewSerializer from baserow.contrib.database.api.views.utils import ( + get_hidden_field_ids_for_view_user, get_public_view_authorization_token, parse_limit_linked_items_params, ) @@ -228,6 +229,7 @@ def get(self, request, view_id, field_options, row_metadata, query_params): ) model = view.table.get_model() + hidden_field_ids = get_hidden_field_ids_for_view_user(request.user, view) adhoc_filters = AdHocFilters.from_request(request) grouped_rows = get_rows_grouped_by_date_field( @@ -250,7 +252,11 @@ def get(self, request, view_id, field_options, row_metadata, query_params): serializer_extra_kwargs = {"limit_linked_items": limit_linked_items} serializer_class = get_row_serializer_class( - model, RowSerializer, is_response=True, extra_kwargs=serializer_extra_kwargs + model, + RowSerializer, + is_response=True, + exclude_field_ids=hidden_field_ids, + extra_kwargs=serializer_extra_kwargs, ) grouped_rows_serialized = {} @@ -264,7 +270,10 @@ def get(self, request, view_id, field_options, row_metadata, query_params): if field_options: view_type = view_type_registry.get_by_model(view) - context = {"fields": [o["field"] for o in model._field_objects.values()]} + fields = [o["field"] for o in model._field_objects.values()] + if hidden_field_ids is not None: + fields = [f for f in fields if f.id not in hidden_field_ids] + context = {"fields": fields} serializer_class = view_type.get_field_options_serializer_class( create_if_missing=True ) diff --git a/premium/backend/src/baserow_premium/api/views/kanban/views.py b/premium/backend/src/baserow_premium/api/views/kanban/views.py index 8572ed19a1..1a837ad9e9 100644 --- a/premium/backend/src/baserow_premium/api/views/kanban/views.py +++ b/premium/backend/src/baserow_premium/api/views/kanban/views.py @@ -26,6 +26,7 @@ ERROR_VIEW_FILTER_TYPE_UNSUPPORTED_FIELD, ) from baserow.contrib.database.api.views.utils import ( + get_hidden_field_ids_for_view_user, get_public_view_authorization_token, parse_limit_linked_items_params, ) @@ -197,12 +198,17 @@ def get(self, request, view_id, field_options, row_metadata): ) = prepare_kanban_view_parameters(request) model = view.table.get_model() + hidden_field_ids = get_hidden_field_ids_for_view_user(request.user, view) limit_linked_items = parse_limit_linked_items_params(request) serializer_extra_kwargs = {"limit_linked_items": limit_linked_items} serializer_class = get_row_serializer_class( - model, RowSerializer, is_response=True, extra_kwargs=serializer_extra_kwargs + model, + RowSerializer, + is_response=True, + exclude_field_ids=hidden_field_ids, + extra_kwargs=serializer_extra_kwargs, ) rows = get_rows_grouped_by_single_select_field( user=request.user, @@ -226,7 +232,10 @@ def get(self, request, view_id, field_options, row_metadata): if field_options: view_type = view_type_registry.get_by_model(view) - context = {"fields": [o["field"] for o in model._field_objects.values()]} + fields = [o["field"] for o in model._field_objects.values()] + if hidden_field_ids is not None: + fields = [f for f in fields if f.id not in hidden_field_ids] + context = {"fields": fields} serializer_class = view_type.get_field_options_serializer_class( create_if_missing=True ) diff --git a/premium/backend/src/baserow_premium/api/views/timeline/views.py b/premium/backend/src/baserow_premium/api/views/timeline/views.py index 5d698cddb6..ab66a98497 100644 --- a/premium/backend/src/baserow_premium/api/views/timeline/views.py +++ b/premium/backend/src/baserow_premium/api/views/timeline/views.py @@ -46,6 +46,7 @@ ) from baserow.contrib.database.api.views.serializers import FieldOptionsField from baserow.contrib.database.api.views.utils import ( + get_hidden_field_ids_for_view_user, get_public_view_authorization_token, paginate_and_serialize_queryset, serialize_rows_metadata, @@ -236,9 +237,15 @@ def get(self, request, view_id, field_options, row_metadata, query_params): field_ids = get_include_exclude_field_ids( view.table, include_fields, exclude_fields ) + hidden_field_ids = get_hidden_field_ids_for_view_user(request.user, view) queryset = get_timeline_view_filtered_queryset( - request.user, view, adhoc_filters, order_by, query_params + request.user, + view, + adhoc_filters, + order_by, + query_params, + hidden_field_ids=hidden_field_ids, ) model = queryset.model @@ -246,11 +253,15 @@ def get(self, request, view_id, field_options, row_metadata, query_params): return Response({"count": queryset.count()}) response, page, _ = paginate_and_serialize_queryset( - queryset, request, field_ids + queryset, request, field_ids, exclude_field_ids=hidden_field_ids ) if field_options: - response.data.update(**serialize_view_field_options(view, model)) + response.data.update( + **serialize_view_field_options( + view, model, exclude_field_ids=hidden_field_ids + ) + ) if row_metadata: response.data.update( diff --git a/premium/backend/src/baserow_premium/permission_manager.py b/premium/backend/src/baserow_premium/permission_manager.py index 6c7a8f64ff..caa45266ed 100644 --- a/premium/backend/src/baserow_premium/permission_manager.py +++ b/premium/backend/src/baserow_premium/permission_manager.py @@ -24,10 +24,12 @@ DuplicateViewOperationType, ListAggregationsViewOperationType, ListViewDecorationOperationType, + ListViewFieldsOperationType, ListViewFilterOperationType, ListViewGroupByOperationType, ListViewsOperationType, ListViewSortOperationType, + ReadAdjacentViewRowOperationType, ReadAggregationsViewOperationType, ReadViewDecorationOperationType, ReadViewFieldOptionsOperationType, @@ -123,9 +125,11 @@ def __init__(self): UpdateViewDecorationOperationType.type, DeleteViewDecorationOperationType.type, ReadViewRowOperationType.type, + ReadAdjacentViewRowOperationType.type, CreateViewRowOperationType.type, UpdateViewRowOperationType.type, DeleteViewRowOperationType.type, + ListViewFieldsOperationType.type, ] # This list controls operations that for personal views, should only be allowed # to be performed by the creator of the personal view BUT should only be diff --git a/premium/backend/src/baserow_premium/views/handler.py b/premium/backend/src/baserow_premium/views/handler.py index 9d7facac80..a9ae25df66 100644 --- a/premium/backend/src/baserow_premium/views/handler.py +++ b/premium/backend/src/baserow_premium/views/handler.py @@ -1,6 +1,6 @@ from collections import defaultdict from datetime import date, datetime, timedelta, timezone -from typing import Dict, List, Optional, Tuple, Union +from typing import Dict, List, Optional, Set, Tuple, Union from zoneinfo import ZoneInfo from django.contrib.auth.models import AbstractUser @@ -327,6 +327,7 @@ def get_timeline_view_filtered_queryset( adhoc_filters: Optional[AdHocFilters] = None, order_by: Optional[str] = None, query_params: Optional[Dict[str, str]] = None, + hidden_field_ids: Optional[Set[int]] = None, ) -> QuerySet: """ Checks if the provided timeline view has a valid date field and raises an exception @@ -339,13 +340,21 @@ def get_timeline_view_filtered_queryset( instead of view filters. :param order_by: The order by fields and directions. :param query_params: The query parameters that can be used to filter the rows. + :param hidden_field_ids: Optional set of field IDs hidden from the user. :return: The filtered queryset. """ timeline_view_type: TimelineViewType = view_type_registry.get_by_model(view) timeline_view_type.raise_if_invalid_date_settings(view) - return get_view_filtered_queryset(user, view, adhoc_filters, order_by, query_params) + return get_view_filtered_queryset( + user, + view, + adhoc_filters, + order_by, + query_params, + hidden_field_ids=hidden_field_ids, + ) def get_public_timeline_view_filtered_queryset( diff --git a/web-frontend/modules/builder/store/page.js b/web-frontend/modules/builder/store/page.js index 28149d561f..17f4b18fbb 100644 --- a/web-frontend/modules/builder/store/page.js +++ b/web-frontend/modules/builder/store/page.js @@ -4,6 +4,7 @@ import PageService from '@baserow/modules/builder/services/page' import { generateHash } from '@baserow/modules/core/utils/hashing' import { pageFinished } from '@baserow/modules/core/utils/routing' import { nextTick } from '#imports' +import { BUILDER_ACTION_SCOPES } from '@baserow/modules/builder/utils/undoRedoConstants' export function populatePage(page) { return { @@ -86,7 +87,7 @@ const actions = { forceCreate({ commit }, { builder, page }) { commit('ADD_ITEM', { builder, page }) }, - selectById({ commit, getters }, { builder, pageId }) { + selectById({ commit, getters, dispatch }, { builder, pageId }) { const type = BuilderApplicationType.getType() // Check if the just selected application is a builder @@ -99,13 +100,24 @@ const actions = { // Check if the provided page id is found in the just selected builder. const page = getters.getById(builder, pageId) + dispatch( + 'undoRedo/updateCurrentScopeSet', + BUILDER_ACTION_SCOPES.page(page.id), + { root: true } + ) + commit('UNSELECT') commit('SET_SELECTED', { builder, page }) return page }, - unselect({ commit }) { + unselect({ commit, dispatch }) { commit('UNSELECT') + dispatch( + 'undoRedo/updateCurrentScopeSet', + BUILDER_ACTION_SCOPES.page(null), + { root: true } + ) }, async forceDelete({ commit }, { builder, page }) { if (page._.selected) { diff --git a/web-frontend/modules/builder/utils/undoRedoConstants.js b/web-frontend/modules/builder/utils/undoRedoConstants.js new file mode 100644 index 0000000000..477781862b --- /dev/null +++ b/web-frontend/modules/builder/utils/undoRedoConstants.js @@ -0,0 +1,8 @@ +// The different types of undo/redo scopes available for the builder module. +export const BUILDER_ACTION_SCOPES = { + page(pageId) { + return { + page: pageId, + } + }, +} diff --git a/web-frontend/modules/core/assets/scss/components/decorator/context.scss b/web-frontend/modules/core/assets/scss/components/decorator/context.scss index 7756a58b9a..f9cc2da509 100644 --- a/web-frontend/modules/core/assets/scss/components/decorator/context.scss +++ b/web-frontend/modules/core/assets/scss/components/decorator/context.scss @@ -44,6 +44,14 @@ margin-left: 12px; } +.decorator-context__warning { + color: $palette-red-500; + max-width: 600px; + font-size: 13px; + line-height: 18px; + margin-top: 16px; +} + .decorator-context__decorator-header-trash-link { color: $color-neutral-500; display: flex; diff --git a/web-frontend/modules/core/assets/scss/components/group_bys.scss b/web-frontend/modules/core/assets/scss/components/group_bys.scss index 2f1b8b7ecd..d58d773412 100644 --- a/web-frontend/modules/core/assets/scss/components/group_bys.scss +++ b/web-frontend/modules/core/assets/scss/components/group_bys.scss @@ -141,6 +141,14 @@ } } +.group-bys__warning { + color: $palette-red-500; + max-width: 445px; + font-size: 13px; + line-height: 18px; + padding: 0 20px; +} + .group-bys__add { @include absolute(calc(100% + 4px), auto, auto, 0); } diff --git a/web-frontend/modules/core/assets/scss/components/sortings.scss b/web-frontend/modules/core/assets/scss/components/sortings.scss index 54951de906..21240f11e6 100644 --- a/web-frontend/modules/core/assets/scss/components/sortings.scss +++ b/web-frontend/modules/core/assets/scss/components/sortings.scss @@ -149,6 +149,14 @@ } } +.sortings__warning { + color: $palette-red-500; + max-width: 445px; + font-size: 13px; + line-height: 18px; + padding: 0 20px; +} + .sortings__add { @include absolute(calc(100% + 4px), auto, auto, 0); } diff --git a/web-frontend/modules/database/components/sidebar/Sidebar.vue b/web-frontend/modules/database/components/sidebar/Sidebar.vue index 01b57f8928..cdbfeebd5f 100644 --- a/web-frontend/modules/database/components/sidebar/Sidebar.vue +++ b/web-frontend/modules/database/components/sidebar/Sidebar.vue @@ -4,22 +4,6 @@ :application="application" @selected="selected" > -