From abe14de9369ef6a886bacb3377ca678aba307c25 Mon Sep 17 00:00:00 2001 From: Luka Pajukanta Date: Fri, 2 Oct 2026 16:27:43 +0300 Subject: [PATCH 1/3] Put program invite surveys in the involvement universe New app=PROGRAM purpose=INVITE surveys use the involvement universe because their fields describe the program host. Existing invite surveys keep the program universe and cannot pass values forward. For new ones, Involvement.from_accepted_invitation passes fields marked with propagateDimensionOnCreate and propagateToAnnotation forward to the involvement. Part of #990. Co-Authored-By: Claude Sonnet 5.5 --- kompassi/forms/models/survey.py | 17 ++- .../forms/utils/extract_dimension_values.py | 25 +++++ kompassi/involvement/models/involvement.py | 14 +++ kompassi/program_v2/tests.py | 106 +++++++++++++++++- .../workflows/program_host_invitation.py | 7 +- 5 files changed, 164 insertions(+), 5 deletions(-) create mode 100644 kompassi/forms/utils/extract_dimension_values.py diff --git a/kompassi/forms/models/survey.py b/kompassi/forms/models/survey.py index 93aa9bebc..c229961d3 100644 --- a/kompassi/forms/models/survey.py +++ b/kompassi/forms/models/survey.py @@ -245,10 +245,21 @@ def _get_universe(self) -> Universe: app=self.app, )[0] case DimensionApp.PROGRAM: + # Invite fields describe the program host, not the program item. + if self.purpose == SurveyPurpose.INVITE: + return self.event.involvement_universe return self.event.program_universe case _: raise NotImplementedError(self.app) + @property + def is_in_involvement_universe(self) -> bool: + """ + False for program invite surveys created before they moved to the involvement universe. + Those cannot pass values forward to the involvement. + """ + return self.universe.app == DimensionApp.INVOLVEMENT + @cached_property def workflow(self) -> Workflow: """ @@ -432,7 +443,7 @@ def clone( Clones this survey with its language versions (but not responses). A stand-alone survey (app=FORMS) gets a fresh clone of this survey's Universe, including its dimensions and values. A program form (app=PROGRAM) uses the target event's shared - program Universe as is; no dimension cloning applies there. + program Universe (an invite uses the involvement Universe) as is; no dimension cloning applies there. Some fields are not copied over because they make no sense or might cause data leaks. """ survey = Survey( @@ -471,8 +482,8 @@ def set_default_response_dimension_values( ): from .survey_default_response_dimension_value import SurveyDefaultResponseDimensionValue - if cache.universe.app != self.app: - raise AssertionError(f"Expected cache universe to match survey app ({cache.universe.app} != {self.app})") + if cache.universe.id != self.universe_id: + raise AssertionError(f"Expected cache to be of the survey universe ({cache.universe} != {self.universe})") set_dimension_values(SurveyDefaultResponseDimensionValue, self, values_to_set, cache) diff --git a/kompassi/forms/utils/extract_dimension_values.py b/kompassi/forms/utils/extract_dimension_values.py new file mode 100644 index 000000000..5ad64c751 --- /dev/null +++ b/kompassi/forms/utils/extract_dimension_values.py @@ -0,0 +1,25 @@ +from ..models.response import Response + + +def extract_dimension_values_from_response( + response: Response, + *, + on_edit: bool = False, +) -> dict[str, list[str]]: + """ + Returns the dimension values of the response that its form fields mark for passing forward. + Only meaningful when the survey universe is the one the values are passed forward into. + """ + dimension_slugs = { + field.dimension + for field in response.form.validated_fields + if field.dimension + and field.type.is_dimension_field + and (field.propagate_dimension_on_edit if on_edit else field.propagate_dimension_on_create) + } + + return { + dimension_slug: list(value_slugs) + for dimension_slug, value_slugs in response.cached_dimensions.items() + if dimension_slug in dimension_slugs + } diff --git a/kompassi/involvement/models/involvement.py b/kompassi/involvement/models/involvement.py index 44f236721..4165dd497 100644 --- a/kompassi/involvement/models/involvement.py +++ b/kompassi/involvement/models/involvement.py @@ -489,6 +489,18 @@ def from_accepted_invitation( app = involvement_type.app is_active = response.survey.workflow.is_response_active(response) + from kompassi.forms.utils.extract_annotations import extract_annotations_from_responses + from kompassi.forms.utils.extract_dimension_values import extract_dimension_values_from_response + + passed_forward_dimensions: dict[str, list[str]] = {} + passed_forward_annotations: CachedAnnotations = {} + if response.survey.is_in_involvement_universe: + passed_forward_dimensions = extract_dimension_values_from_response(response) + passed_forward_annotations = extract_annotations_from_responses( + [response], + cache.universe.active_universe_annotations.all(), + ) + involvement, created = cls.objects.update_or_create( universe=cache.universe, person=response.original_created_by.person, # type: ignore @@ -503,10 +515,12 @@ def from_accepted_invitation( ), ) + involvement.annotations = {**involvement.annotations, **passed_forward_annotations} involvement.with_computed_fields().save() if created or override_dimensions: dimensions = validate_cached_dimensions(response.survey.cached_default_involvement_dimensions) + dimensions.update(passed_forward_dimensions) dimensions.update(validate_cached_dimensions(invitation.cached_dimensions)) involvement.refresh_dimensions(dimensions, cache=cache) else: diff --git a/kompassi/program_v2/tests.py b/kompassi/program_v2/tests.py index eb6c42105..dcd738986 100644 --- a/kompassi/program_v2/tests.py +++ b/kompassi/program_v2/tests.py @@ -7,7 +7,9 @@ from kompassi.access.models.email_alias_domain import EmailAliasDomain from kompassi.core.models.person import Person from kompassi.dimensions.models.annotation import Annotation -from kompassi.dimensions.models.enums import DimensionApp +from kompassi.dimensions.models.dimension import Dimension +from kompassi.dimensions.models.dimension_value import DimensionValue +from kompassi.dimensions.models.enums import AnnotationAppliesTo, AnnotationDataType, DimensionApp from kompassi.dimensions.models.universe_annotation import UniverseAnnotation from kompassi.forms.models.enums import SurveyPurpose from kompassi.forms.models.form import Form @@ -225,6 +227,8 @@ def test_extract_annotations(): slug="accept-program-invitation", app=DimensionApp.PROGRAM, purpose=SurveyPurpose.INVITE, + # legacy: invites used to live in the program universe + universe=event.program_universe, ).with_mandatory_fields() accept_invitation.save() accept_invitation.workflow.handle_new_survey() @@ -390,3 +394,103 @@ def test_schedule_public_from(): meta.save(update_fields=["public_from"]) meta.refresh_from_db() assert meta.is_schedule_public + + +@pytest.mark.django_db +def test_invite_survey_lives_in_involvement_universe_and_passes_values_forward(): + meta, _ = ProgramV2EventMeta.get_or_create_dummy() + event = meta.event + EmailAliasDomain.get_or_create_dummy() + + person, _ = Person.get_or_create_dummy() + person2, _ = Person.get_or_create_dummy(another=True, superuser=False) + + offer = Survey(event=event, slug="offer", app=DimensionApp.PROGRAM, purpose=SurveyPurpose.DEFAULT) + offer.with_mandatory_fields().save() + offer.workflow.handle_new_survey() + offer_en = Form( + event=event, + survey=offer, + language="en", + fields=[dict(slug="title", title="Title", type="SingleLineText", required=True)], + ) + offer_en.save() + offer.workflow.handle_form_update() + + invite = Survey(event=event, slug="invite", app=DimensionApp.PROGRAM, purpose=SurveyPurpose.INVITE) + invite.with_mandatory_fields().save() + invite.workflow.handle_new_survey() + assert invite.universe == event.involvement_universe + assert invite.is_in_involvement_universe + assert offer.universe == event.program_universe + + annotation = Annotation.objects.create( + slug="test:hostNote", + type=AnnotationDataType.STRING, + applies_to=AnnotationAppliesTo.INVOLVEMENT, + ) + UniverseAnnotation.objects.create(universe=invite.universe, annotation=annotation) + + dimension = Dimension.objects.create(universe=invite.universe, slug="host-kind") + DimensionValue.objects.create(dimension=dimension, slug="gm", title_en="GM") + + invite_en = Form( + event=event, + survey=invite, + language="en", + fields=[ + dict(slug="note", title="Note", type="SingleLineText", propagateToAnnotation="test:hostNote"), + dict( + slug="kind", + title="Kind", + type="DimensionSingleSelect", + dimension="host-kind", + propagateDimensionOnCreate=True, + ), + ], + ) + invite_en.save() + invite.workflow.handle_form_update() + + with transaction.atomic(): + program_offer = Response.objects.create( + form=offer_en, + form_data={"title": "Test program"}, + revision_created_by=person.user, + ip_address="127.0.0.1", + sequence_number=offer.get_next_sequence_number(), + ) + offer.workflow.handle_new_response_phase1(program_offer) + offer.workflow.handle_new_response_phase2(program_offer) + program = Program.from_program_offer(program_offer) + + invitation = program.invite_program_host( + person2.email, + survey=invite, + language="en", + involvement_dimensions={}, + ) + + with transaction.atomic(): + response = Response.objects.create( + form=invite_en, + form_data={"note": "hello", "kind": "gm"}, + revision_created_by=person2.user, + ip_address="127.0.0.1", + sequence_number=invite.get_next_sequence_number(), + ) + invite.workflow.handle_new_response_phase1(response) + invitation.mark_used() + involvement = Involvement.from_accepted_invitation( + response=response, + invitation=invitation, + cache=event.involvement_universe.preload_dimensions(), + ) + invite.workflow.handle_new_response_phase2(response) + + assert response.cached_dimensions["host-kind"] == ["gm"] + assert involvement.annotations["test:hostNote"] == "hello" + assert involvement.cached_dimensions["host-kind"] == ["gm"] + + program.refresh_from_db() + assert "test:hostNote" not in program.annotations diff --git a/kompassi/program_v2/workflows/program_host_invitation.py b/kompassi/program_v2/workflows/program_host_invitation.py index 27562820c..e5865e1e0 100644 --- a/kompassi/program_v2/workflows/program_host_invitation.py +++ b/kompassi/program_v2/workflows/program_host_invitation.py @@ -8,7 +8,8 @@ class ProgramHostInvitationWorkflow(Workflow): """ - Note that the Universe for program host invitations is the Involvement universe. + Program host invitations created after the Involvement universe became their home live in it; + older ones (see Survey.is_in_involvement_universe) still live in the program universe. XXX This Workflow is silly because everything is handled in accept_invitation.py. """ @@ -64,6 +65,10 @@ def handle_new_response_phase2( if program is None: raise AssertionError("No it isn't (appease typechecker)") + if response.survey.is_in_involvement_universe: + # the fields describe the host; Involvement.from_accepted_invitation passed them forward + return + program.refresh_annotations( extract_annotations_from_responses( program.responses.all(), From 84fd24142274574a9032314555e20f15a5b47113 Mon Sep 17 00:00:00 2001 From: Luka Pajukanta Date: Fri, 2 Oct 2026 17:11:36 +0300 Subject: [PATCH 2/3] Address review: universe-based Universe.surveys, per-field dimension extraction Co-Authored-By: Claude Sonnet 5.5 --- kompassi/dimensions/models/universe.py | 15 +----- kompassi/forms/tests.py | 26 ++++++++++ .../forms/utils/extract_dimension_values.py | 39 ++++++++++---- kompassi/forms/utils/lift_dimension_values.py | 51 ++++++++++++------- 4 files changed, 91 insertions(+), 40 deletions(-) diff --git a/kompassi/dimensions/models/universe.py b/kompassi/dimensions/models/universe.py index d0c8fc0ae..dd6efdbe6 100644 --- a/kompassi/dimensions/models/universe.py +++ b/kompassi/dimensions/models/universe.py @@ -81,20 +81,7 @@ def annotations(self) -> models.QuerySet[Annotation]: def surveys(self): from kompassi.forms.models.survey import Survey - match self.app: - case DimensionApp.FORMS: - return Survey.objects.filter( - event=self.scope.event, - slug=self.slug, - app=self.app, - ) - case DimensionApp.PROGRAM: - return Survey.objects.filter( - event=self.scope.event, - app=self.app, - ) - case _: - raise ValueError(f"Unknown app type: {self.app}") + return Survey.objects.filter(universe=self) def clone(self, *, scope: Scope, slug: str) -> Universe: """ diff --git a/kompassi/forms/tests.py b/kompassi/forms/tests.py index cafb2e840..90159e664 100644 --- a/kompassi/forms/tests.py +++ b/kompassi/forms/tests.py @@ -2123,3 +2123,29 @@ def test_extract_annotations_ignores_annotations_not_applicable_to_the_universe( ] assert extract_annotations_from_responses([response], universe_annotations) == {"test:programNote": "x"} + + +@pytest.mark.django_db +def test_extract_dimension_values_uses_only_marked_fields(): + from .utils.extract_dimension_values import extract_dimension_values_from_response + + event, _ = Event.get_or_create_dummy() + survey = Survey(event=event, slug="dims", app=DimensionApp.FORMS, purpose=SurveyPurpose.DEFAULT) + survey.with_mandatory_fields().save() + dimension = Dimension.objects.create(universe=survey.universe, slug="kind") + for value_slug in ("a", "b"): + DimensionValue.objects.create(dimension=dimension, slug=value_slug) + + form = Form.objects.create( + event=event, + survey=survey, + language="en", + fields=[ + dict(slug="marked", type="DimensionSingleSelect", dimension="kind", propagateDimensionOnCreate=True), + dict(slug="unmarked", type="DimensionSingleSelect", dimension="kind"), + ], + ) + response = Response.objects.create(form=form, form_data={"marked": "a", "unmarked": "b"}) + + assert extract_dimension_values_from_response(response) == {"kind": ["a"]} + assert extract_dimension_values_from_response(response, on_edit=True) == {} diff --git a/kompassi/forms/utils/extract_dimension_values.py b/kompassi/forms/utils/extract_dimension_values.py index 5ad64c751..173f96680 100644 --- a/kompassi/forms/utils/extract_dimension_values.py +++ b/kompassi/forms/utils/extract_dimension_values.py @@ -1,4 +1,10 @@ +import logging +from collections import defaultdict + from ..models.response import Response +from .lift_dimension_values import get_dimension_field_value_slugs + +logger = logging.getLogger(__name__) def extract_dimension_values_from_response( @@ -7,19 +13,34 @@ def extract_dimension_values_from_response( on_edit: bool = False, ) -> dict[str, list[str]]: """ - Returns the dimension values of the response that its form fields mark for passing forward. + Returns the dimension values that the fields of the response mark for passing forward. + Values come from the marked fields only, not from other fields feeding the same dimension. Only meaningful when the survey universe is the one the values are passed forward into. """ - dimension_slugs = { - field.dimension + fields = [ + field for field in response.form.validated_fields if field.dimension and field.type.is_dimension_field and (field.propagate_dimension_on_edit if on_edit else field.propagate_dimension_on_create) - } + ] + if not fields: + return {} + + values, warnings = response.get_processed_form_data(fields) + result: defaultdict[str, list[str]] = defaultdict(list) + + for field in fields: + if warnings.get(field.slug): + continue + + value_slugs = get_dimension_field_value_slugs( + field, + values, + dict(response=response.id, field=field.slug, dimension=field.dimension), + ) + for value_slug in value_slugs or []: + if value_slug not in result[str(field.dimension)]: + result[str(field.dimension)].append(value_slug) - return { - dimension_slug: list(value_slugs) - for dimension_slug, value_slugs in response.cached_dimensions.items() - if dimension_slug in dimension_slugs - } + return dict(result) diff --git a/kompassi/forms/utils/lift_dimension_values.py b/kompassi/forms/utils/lift_dimension_values.py index 5002d1273..bc76e8452 100644 --- a/kompassi/forms/utils/lift_dimension_values.py +++ b/kompassi/forms/utils/lift_dimension_values.py @@ -2,6 +2,7 @@ import logging from collections import defaultdict +from typing import Any from kompassi.dimensions.utils.dimension_cache import DimensionCache @@ -71,23 +72,8 @@ def lift_dimension_values( ) continue - value_slugs: list[str] - match field.type: - case FieldType.DIMENSION_MULTI_SELECT: - value_slugs = values.get(field.slug, []) - case FieldType.DIMENSION_SINGLE_SELECT: - value_slugs = [value_slug] if (value_slug := values.get(field.slug)) else [] - case FieldType.DIMENSION_SINGLE_CHECKBOX: - value_slugs = ["true"] if values.get(field.slug) else ["false"] - case _: - logger.warning("Unexpected field type for dimension field: %s", log_context) - continue - - if not isinstance(value_slugs, list): - logger.warning( - "Expected list of value slugs for dimension field: %s", - dict(log_context, value_slugs=value_slugs), - ) + value_slugs = get_dimension_field_value_slugs(field, values, log_context) + if value_slugs is None: continue for value_slug in value_slugs: @@ -104,3 +90,34 @@ def lift_dimension_values( response.set_dimension_values(values_to_set, cache) return values_to_set + + +def get_dimension_field_value_slugs( + field: Field, + values: dict[str, Any], + log_context: dict[str, Any], +) -> list[str] | None: + """ + Normalizes the processed form data value of a Dimension* field into a list of value slugs. + Returns None if the value cannot be interpreted. + """ + value_slugs: list[str] + match field.type: + case FieldType.DIMENSION_MULTI_SELECT: + value_slugs = values.get(field.slug, []) + case FieldType.DIMENSION_SINGLE_SELECT: + value_slugs = [value_slug] if (value_slug := values.get(field.slug)) else [] + case FieldType.DIMENSION_SINGLE_CHECKBOX: + value_slugs = ["true"] if values.get(field.slug) else ["false"] + case _: + logger.warning("Unexpected field type for dimension field: %s", log_context) + return None + + if not isinstance(value_slugs, list): + logger.warning( + "Expected list of value slugs for dimension field: %s", + dict(log_context, value_slugs=value_slugs), + ) + return None + + return value_slugs From cb393d9dca80960169020fc54998b44d8a83bcae Mon Sep 17 00:00:00 2001 From: Luka Pajukanta Date: Fri, 2 Oct 2026 17:18:46 +0300 Subject: [PATCH 3/3] Choose the annotation context of program forms by universe New invite forms live in the involvement universe, legacy ones in the program universe, so the purpose alone no longer tells which object annotations land on. Co-Authored-By: Claude Sonnet 5.5 --- kompassi-v2-frontend/src/__generated__/gql.ts | 6 +++--- kompassi-v2-frontend/src/__generated__/graphql.ts | 4 ++-- .../[surveySlug]/edit/[language]/fields/page.tsx | 7 ++----- kompassi/forms/graphql/survey_full.py | 8 ++++++++ 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/kompassi-v2-frontend/src/__generated__/gql.ts b/kompassi-v2-frontend/src/__generated__/gql.ts index 535dc5ae8..bbea07f8a 100644 --- a/kompassi-v2-frontend/src/__generated__/gql.ts +++ b/kompassi-v2-frontend/src/__generated__/gql.ts @@ -100,7 +100,7 @@ type Documents = { "\n mutation DeleteProgramFormLanguage($input: DeleteSurveyLanguageInput!) {\n deleteSurveyLanguage(input: $input) {\n language\n }\n }\n": typeof types.DeleteProgramFormLanguageDocument, "\n mutation UpdateFormFieldsMutation($input: UpdateFormFieldsInput!) {\n updateFormFields(input: $input) {\n survey {\n slug\n }\n }\n }\n": typeof types.UpdateFormFieldsMutationDocument, "\n mutation PromoteProgramFormFieldToDimension(\n $input: PromoteFieldToDimensionInput!\n ) {\n promoteFieldToDimension(input: $input) {\n survey {\n slug\n }\n }\n }\n": typeof types.PromoteProgramFormFieldToDimensionDocument, - "\n query EditProgramFormFieldsPage(\n $eventSlug: String!\n $surveySlug: String!\n $language: String!\n $locale: String\n ) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n eventAnnotations {\n isActive\n annotation {\n slug\n title(lang: $locale)\n isApplicableToProgramItems\n isApplicableToInvolvements\n }\n }\n }\n\n forms {\n survey(slug: $surveySlug, app: PROGRAM) {\n ...EditSurveyFieldsPage\n }\n }\n }\n }\n": typeof types.EditProgramFormFieldsPageDocument, + "\n query EditProgramFormFieldsPage(\n $eventSlug: String!\n $surveySlug: String!\n $language: String!\n $locale: String\n ) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n eventAnnotations {\n isActive\n annotation {\n slug\n title(lang: $locale)\n isApplicableToProgramItems\n isApplicableToInvolvements\n }\n }\n }\n\n forms {\n survey(slug: $surveySlug, app: PROGRAM) {\n ...EditSurveyFieldsPage\n isInInvolvementUniverse\n }\n }\n }\n }\n": typeof types.EditProgramFormFieldsPageDocument, "\n fragment EditProgramFormLanguage on FullSurveyType {\n slug\n title(lang: $locale)\n canRemove\n canGrantAccess\n purpose\n\n form(lang: $language) {\n title\n language\n description\n thankYouMessage\n fields\n canRemove\n }\n\n languages {\n language\n }\n }\n": typeof types.EditProgramFormLanguageFragmentDoc, "\n query EditProgramFormLanguagePage(\n $eventSlug: String!\n $surveySlug: String!\n $language: String!\n $locale: String\n ) {\n event(slug: $eventSlug) {\n name\n slug\n\n forms {\n survey(slug: $surveySlug, app: PROGRAM) {\n ...EditProgramFormLanguage\n }\n }\n }\n }\n": typeof types.EditProgramFormLanguagePageDocument, "\n mutation CreateProgramFormLanguage($input: CreateSurveyLanguageInput!) {\n createSurveyLanguage(input: $input) {\n form {\n language\n }\n }\n }\n": typeof types.CreateProgramFormLanguageDocument, @@ -349,7 +349,7 @@ const documents: Documents = { "\n mutation DeleteProgramFormLanguage($input: DeleteSurveyLanguageInput!) {\n deleteSurveyLanguage(input: $input) {\n language\n }\n }\n": types.DeleteProgramFormLanguageDocument, "\n mutation UpdateFormFieldsMutation($input: UpdateFormFieldsInput!) {\n updateFormFields(input: $input) {\n survey {\n slug\n }\n }\n }\n": types.UpdateFormFieldsMutationDocument, "\n mutation PromoteProgramFormFieldToDimension(\n $input: PromoteFieldToDimensionInput!\n ) {\n promoteFieldToDimension(input: $input) {\n survey {\n slug\n }\n }\n }\n": types.PromoteProgramFormFieldToDimensionDocument, - "\n query EditProgramFormFieldsPage(\n $eventSlug: String!\n $surveySlug: String!\n $language: String!\n $locale: String\n ) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n eventAnnotations {\n isActive\n annotation {\n slug\n title(lang: $locale)\n isApplicableToProgramItems\n isApplicableToInvolvements\n }\n }\n }\n\n forms {\n survey(slug: $surveySlug, app: PROGRAM) {\n ...EditSurveyFieldsPage\n }\n }\n }\n }\n": types.EditProgramFormFieldsPageDocument, + "\n query EditProgramFormFieldsPage(\n $eventSlug: String!\n $surveySlug: String!\n $language: String!\n $locale: String\n ) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n eventAnnotations {\n isActive\n annotation {\n slug\n title(lang: $locale)\n isApplicableToProgramItems\n isApplicableToInvolvements\n }\n }\n }\n\n forms {\n survey(slug: $surveySlug, app: PROGRAM) {\n ...EditSurveyFieldsPage\n isInInvolvementUniverse\n }\n }\n }\n }\n": types.EditProgramFormFieldsPageDocument, "\n fragment EditProgramFormLanguage on FullSurveyType {\n slug\n title(lang: $locale)\n canRemove\n canGrantAccess\n purpose\n\n form(lang: $language) {\n title\n language\n description\n thankYouMessage\n fields\n canRemove\n }\n\n languages {\n language\n }\n }\n": types.EditProgramFormLanguageFragmentDoc, "\n query EditProgramFormLanguagePage(\n $eventSlug: String!\n $surveySlug: String!\n $language: String!\n $locale: String\n ) {\n event(slug: $eventSlug) {\n name\n slug\n\n forms {\n survey(slug: $surveySlug, app: PROGRAM) {\n ...EditProgramFormLanguage\n }\n }\n }\n }\n": types.EditProgramFormLanguagePageDocument, "\n mutation CreateProgramFormLanguage($input: CreateSurveyLanguageInput!) {\n createSurveyLanguage(input: $input) {\n form {\n language\n }\n }\n }\n": types.CreateProgramFormLanguageDocument, @@ -873,7 +873,7 @@ export function graphql(source: "\n mutation PromoteProgramFormFieldToDimension /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query EditProgramFormFieldsPage(\n $eventSlug: String!\n $surveySlug: String!\n $language: String!\n $locale: String\n ) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n eventAnnotations {\n isActive\n annotation {\n slug\n title(lang: $locale)\n isApplicableToProgramItems\n isApplicableToInvolvements\n }\n }\n }\n\n forms {\n survey(slug: $surveySlug, app: PROGRAM) {\n ...EditSurveyFieldsPage\n }\n }\n }\n }\n"): (typeof documents)["\n query EditProgramFormFieldsPage(\n $eventSlug: String!\n $surveySlug: String!\n $language: String!\n $locale: String\n ) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n eventAnnotations {\n isActive\n annotation {\n slug\n title(lang: $locale)\n isApplicableToProgramItems\n isApplicableToInvolvements\n }\n }\n }\n\n forms {\n survey(slug: $surveySlug, app: PROGRAM) {\n ...EditSurveyFieldsPage\n }\n }\n }\n }\n"]; +export function graphql(source: "\n query EditProgramFormFieldsPage(\n $eventSlug: String!\n $surveySlug: String!\n $language: String!\n $locale: String\n ) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n eventAnnotations {\n isActive\n annotation {\n slug\n title(lang: $locale)\n isApplicableToProgramItems\n isApplicableToInvolvements\n }\n }\n }\n\n forms {\n survey(slug: $surveySlug, app: PROGRAM) {\n ...EditSurveyFieldsPage\n isInInvolvementUniverse\n }\n }\n }\n }\n"): (typeof documents)["\n query EditProgramFormFieldsPage(\n $eventSlug: String!\n $surveySlug: String!\n $language: String!\n $locale: String\n ) {\n event(slug: $eventSlug) {\n name\n slug\n\n program {\n eventAnnotations {\n isActive\n annotation {\n slug\n title(lang: $locale)\n isApplicableToProgramItems\n isApplicableToInvolvements\n }\n }\n }\n\n forms {\n survey(slug: $surveySlug, app: PROGRAM) {\n ...EditSurveyFieldsPage\n isInInvolvementUniverse\n }\n }\n }\n }\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/kompassi-v2-frontend/src/__generated__/graphql.ts b/kompassi-v2-frontend/src/__generated__/graphql.ts index fffb9d70e..d50797cab 100644 --- a/kompassi-v2-frontend/src/__generated__/graphql.ts +++ b/kompassi-v2-frontend/src/__generated__/graphql.ts @@ -1227,7 +1227,7 @@ export type EditProgramFormFieldsPageQueryVariables = Exact<{ }>; -export type EditProgramFormFieldsPageQuery = { event: { name: string, slug: string, program: { eventAnnotations: Array<{ isActive: boolean, annotation: { slug: string, title: string, isApplicableToProgramItems: boolean, isApplicableToInvolvements: boolean } }> } | null, forms: { survey: { slug: string, title: string | null, canRemove: boolean, canGrantAccess: boolean, purpose: SurveyPurpose, dimensions: Array<{ slug: string, canRemove: boolean, canAddValues: boolean, title: string | null, isPublic: boolean, isKeyDimension: boolean, isMultiValue: boolean, isListFilter: boolean, isShownInDetail: boolean, isNegativeSelection: boolean, isTechnical: boolean, valueOrdering: DimensionsDimensionValueOrderingChoices, titleFi: string, titleEn: string, titleSv: string, values: Array<{ slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title: string | null, titleFi: string, titleEn: string, titleSv: string }> }>, form: { title: string, language: FormsFormLanguageChoices, fields: unknown, canRemove: boolean } | null, languages: Array<{ language: FormsFormLanguageChoices }> } | null } | null } | null }; +export type EditProgramFormFieldsPageQuery = { event: { name: string, slug: string, program: { eventAnnotations: Array<{ isActive: boolean, annotation: { slug: string, title: string, isApplicableToProgramItems: boolean, isApplicableToInvolvements: boolean } }> } | null, forms: { survey: { isInInvolvementUniverse: boolean, slug: string, title: string | null, canRemove: boolean, canGrantAccess: boolean, purpose: SurveyPurpose, dimensions: Array<{ slug: string, canRemove: boolean, canAddValues: boolean, title: string | null, isPublic: boolean, isKeyDimension: boolean, isMultiValue: boolean, isListFilter: boolean, isShownInDetail: boolean, isNegativeSelection: boolean, isTechnical: boolean, valueOrdering: DimensionsDimensionValueOrderingChoices, titleFi: string, titleEn: string, titleSv: string, values: Array<{ slug: string, color: string, isTechnical: boolean, isSubjectLocked: boolean, canRemove: boolean, title: string | null, titleFi: string, titleEn: string, titleSv: string }> }>, form: { title: string, language: FormsFormLanguageChoices, fields: unknown, canRemove: boolean } | null, languages: Array<{ language: FormsFormLanguageChoices }> } | null } | null } | null }; export type EditProgramFormLanguageFragment = { slug: string, title: string | null, canRemove: boolean, canGrantAccess: boolean, purpose: SurveyPurpose, form: { title: string, language: FormsFormLanguageChoices, description: string, thankYouMessage: string, fields: unknown, canRemove: boolean } | null, languages: Array<{ language: FormsFormLanguageChoices }> }; @@ -2282,7 +2282,7 @@ export const UpdateProgramFormLanguageDocument = {"kind":"Document","definitions export const DeleteProgramFormLanguageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteProgramFormLanguage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"DeleteSurveyLanguageInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteSurveyLanguage"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"language"}}]}}]}}]} as unknown as DocumentNode; export const UpdateFormFieldsMutationDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateFormFieldsMutation"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpdateFormFieldsInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateFormFields"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"survey"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}}]}}]}}]} as unknown as DocumentNode; export const PromoteProgramFormFieldToDimensionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"PromoteProgramFormFieldToDimension"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"PromoteFieldToDimensionInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"promoteFieldToDimension"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"survey"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}}]}}]}}]} as unknown as DocumentNode; -export const EditProgramFormFieldsPageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"EditProgramFormFieldsPage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"surveySlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"language"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"event"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"program"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"eventAnnotations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"annotation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"isApplicableToProgramItems"}},{"kind":"Field","name":{"kind":"Name","value":"isApplicableToInvolvements"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"forms"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"survey"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"surveySlug"}}},{"kind":"Argument","name":{"kind":"Name","value":"app"},"value":{"kind":"EnumValue","value":"PROGRAM"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"EditSurveyFieldsPage"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DimensionEditorValue"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"DimensionValueType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"isTechnical"}},{"kind":"Field","name":{"kind":"Name","value":"isSubjectLocked"}},{"kind":"Field","name":{"kind":"Name","value":"canRemove"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"titleFi"}},{"kind":"Field","name":{"kind":"Name","value":"titleEn"}},{"kind":"Field","name":{"kind":"Name","value":"titleSv"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DimensionEditor"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullDimensionType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"canRemove"}},{"kind":"Field","name":{"kind":"Name","value":"canAddValues"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"isPublic"}},{"kind":"Field","name":{"kind":"Name","value":"isKeyDimension"}},{"kind":"Field","name":{"kind":"Name","value":"isMultiValue"}},{"kind":"Field","name":{"kind":"Name","value":"isListFilter"}},{"kind":"Field","name":{"kind":"Name","value":"isShownInDetail"}},{"kind":"Field","name":{"kind":"Name","value":"isNegativeSelection"}},{"kind":"Field","name":{"kind":"Name","value":"isTechnical"}},{"kind":"Field","name":{"kind":"Name","value":"valueOrdering"}},{"kind":"Field","name":{"kind":"Name","value":"titleFi"}},{"kind":"Field","name":{"kind":"Name","value":"titleEn"}},{"kind":"Field","name":{"kind":"Name","value":"titleSv"}},{"kind":"Field","name":{"kind":"Name","value":"values"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"DimensionEditorValue"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"EditSurveyFieldsPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullSurveyType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"canRemove"}},{"kind":"Field","name":{"kind":"Name","value":"canGrantAccess"}},{"kind":"Field","name":{"kind":"Name","value":"purpose"}},{"kind":"Field","name":{"kind":"Name","value":"dimensions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"DimensionEditor"}}]}},{"kind":"Field","name":{"kind":"Name","value":"form"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"language"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"language"}},{"kind":"Field","name":{"kind":"Name","value":"fields"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"enrich"},"value":{"kind":"BooleanValue","value":false}}]},{"kind":"Field","name":{"kind":"Name","value":"canRemove"}}]}},{"kind":"Field","name":{"kind":"Name","value":"languages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"language"}}]}}]}}]} as unknown as DocumentNode; +export const EditProgramFormFieldsPageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"EditProgramFormFieldsPage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"surveySlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"language"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"event"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"program"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"eventAnnotations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"annotation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"isApplicableToProgramItems"}},{"kind":"Field","name":{"kind":"Name","value":"isApplicableToInvolvements"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"forms"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"survey"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"surveySlug"}}},{"kind":"Argument","name":{"kind":"Name","value":"app"},"value":{"kind":"EnumValue","value":"PROGRAM"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"EditSurveyFieldsPage"}},{"kind":"Field","name":{"kind":"Name","value":"isInInvolvementUniverse"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DimensionEditorValue"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"DimensionValueType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"isTechnical"}},{"kind":"Field","name":{"kind":"Name","value":"isSubjectLocked"}},{"kind":"Field","name":{"kind":"Name","value":"canRemove"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"titleFi"}},{"kind":"Field","name":{"kind":"Name","value":"titleEn"}},{"kind":"Field","name":{"kind":"Name","value":"titleSv"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DimensionEditor"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullDimensionType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"canRemove"}},{"kind":"Field","name":{"kind":"Name","value":"canAddValues"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"isPublic"}},{"kind":"Field","name":{"kind":"Name","value":"isKeyDimension"}},{"kind":"Field","name":{"kind":"Name","value":"isMultiValue"}},{"kind":"Field","name":{"kind":"Name","value":"isListFilter"}},{"kind":"Field","name":{"kind":"Name","value":"isShownInDetail"}},{"kind":"Field","name":{"kind":"Name","value":"isNegativeSelection"}},{"kind":"Field","name":{"kind":"Name","value":"isTechnical"}},{"kind":"Field","name":{"kind":"Name","value":"valueOrdering"}},{"kind":"Field","name":{"kind":"Name","value":"titleFi"}},{"kind":"Field","name":{"kind":"Name","value":"titleEn"}},{"kind":"Field","name":{"kind":"Name","value":"titleSv"}},{"kind":"Field","name":{"kind":"Name","value":"values"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"DimensionEditorValue"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"EditSurveyFieldsPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullSurveyType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"canRemove"}},{"kind":"Field","name":{"kind":"Name","value":"canGrantAccess"}},{"kind":"Field","name":{"kind":"Name","value":"purpose"}},{"kind":"Field","name":{"kind":"Name","value":"dimensions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"DimensionEditor"}}]}},{"kind":"Field","name":{"kind":"Name","value":"form"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"language"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"language"}},{"kind":"Field","name":{"kind":"Name","value":"fields"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"enrich"},"value":{"kind":"BooleanValue","value":false}}]},{"kind":"Field","name":{"kind":"Name","value":"canRemove"}}]}},{"kind":"Field","name":{"kind":"Name","value":"languages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"language"}}]}}]}}]} as unknown as DocumentNode; export const EditProgramFormLanguagePageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"EditProgramFormLanguagePage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"surveySlug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"language"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"event"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"eventSlug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"forms"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"survey"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"surveySlug"}}},{"kind":"Argument","name":{"kind":"Name","value":"app"},"value":{"kind":"EnumValue","value":"PROGRAM"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"EditProgramFormLanguage"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"EditProgramFormLanguage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FullSurveyType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}]},{"kind":"Field","name":{"kind":"Name","value":"canRemove"}},{"kind":"Field","name":{"kind":"Name","value":"canGrantAccess"}},{"kind":"Field","name":{"kind":"Name","value":"purpose"}},{"kind":"Field","name":{"kind":"Name","value":"form"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"lang"},"value":{"kind":"Variable","name":{"kind":"Name","value":"language"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"language"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"thankYouMessage"}},{"kind":"Field","name":{"kind":"Name","value":"fields"}},{"kind":"Field","name":{"kind":"Name","value":"canRemove"}}]}},{"kind":"Field","name":{"kind":"Name","value":"languages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"language"}}]}}]}}]} as unknown as DocumentNode; export const CreateProgramFormLanguageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateProgramFormLanguage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateSurveyLanguageInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createSurveyLanguage"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"form"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"language"}}]}}]}}]}}]} as unknown as DocumentNode; export const UpdateProgramFormMutationDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateProgramFormMutation"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpdateSurveyInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateProgramForm"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"survey"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}}]}}]}}]} as unknown as DocumentNode; diff --git a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-forms/[surveySlug]/edit/[language]/fields/page.tsx b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-forms/[surveySlug]/edit/[language]/fields/page.tsx index ad22e1a3f..650ba63d9 100644 --- a/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-forms/[surveySlug]/edit/[language]/fields/page.tsx +++ b/kompassi-v2-frontend/src/app/[locale]/[eventSlug]/program-forms/[surveySlug]/edit/[language]/fields/page.tsx @@ -37,6 +37,7 @@ const query = graphql(` forms { survey(slug: $surveySlug, app: PROGRAM) { ...EditSurveyFieldsPage + isInInvolvementUniverse } } } @@ -134,11 +135,7 @@ export default async function EditProgramFormFieldsPage(props: Props) { initialFields={form.fields} dimensions={dimensions} annotations={annotations} - formContext={ - survey.purpose === "DEFAULT" || survey.purpose === "INVITE" - ? "program" - : "involvement" - } + formContext={survey.isInInvolvementUniverse ? "involvement" : "program"} messages={{ FormEditor: translations.FormEditor, SchemaForm: translations.SchemaForm, diff --git a/kompassi/forms/graphql/survey_full.py b/kompassi/forms/graphql/survey_full.py index 1d229dc3b..556fa9ad2 100644 --- a/kompassi/forms/graphql/survey_full.py +++ b/kompassi/forms/graphql/survey_full.py @@ -236,6 +236,14 @@ def resolve_languages(parent: Survey, info): # TODO supported_languages order instead of alphabetical? return parent.languages.order_by("language") + is_in_involvement_universe = graphene.NonNull( + graphene.Boolean, + description=( + "Whether the fields of this survey describe the involvement (eg. the program host) " + "and not the app object (eg. the program item)." + ), + ) + # TODO unify can_remove/can_delete naming across all apps @staticmethod def resolve_can_remove(survey: Survey, info):