From 688c4e36b3d5a23238ab0741d427a8150eb46a93 Mon Sep 17 00:00:00 2001 From: Pascal Martineau Date: Tue, 13 Jan 2026 21:25:20 -0500 Subject: [PATCH] feat: Initial NodeByUri logic and frontend --- .../acf-json/group_abstract_builder.json | 154 ++++++++++++++++++ .../moonshine/acf-json/group_post_page.json | 66 ++++++++ .../builder/BuilderSections.fragment.gql | 8 + .../components/builder/BuilderSections.vue | 9 + .../components/nodes/NodePage.fragment.gql | 6 + .../app/components/nodes/NodePage.global.vue | 14 ++ .../sections/SectionTextBlock.fragment.gql | 3 + .../components/sections/SectionTextBlock.vue | 9 + .../moonshine/app/graphql/NodebyUri.query.gql | 8 + .../themes/moonshine/app/pages/[...uri].vue | 15 +- 10 files changed, 291 insertions(+), 1 deletion(-) create mode 100644 wp-content/themes/moonshine/acf-json/group_abstract_builder.json create mode 100644 wp-content/themes/moonshine/acf-json/group_post_page.json create mode 100644 wp-content/themes/moonshine/app/components/builder/BuilderSections.fragment.gql create mode 100644 wp-content/themes/moonshine/app/components/builder/BuilderSections.vue create mode 100644 wp-content/themes/moonshine/app/components/nodes/NodePage.fragment.gql create mode 100644 wp-content/themes/moonshine/app/components/nodes/NodePage.global.vue create mode 100644 wp-content/themes/moonshine/app/components/sections/SectionTextBlock.fragment.gql create mode 100644 wp-content/themes/moonshine/app/components/sections/SectionTextBlock.vue create mode 100644 wp-content/themes/moonshine/app/graphql/NodebyUri.query.gql diff --git a/wp-content/themes/moonshine/acf-json/group_abstract_builder.json b/wp-content/themes/moonshine/acf-json/group_abstract_builder.json new file mode 100644 index 0000000..423ff49 --- /dev/null +++ b/wp-content/themes/moonshine/acf-json/group_abstract_builder.json @@ -0,0 +1,154 @@ +{ + "key": "group_abstract_builder", + "title": "Abstract - Builder", + "fields": [ + { + "key": "field_builder_sections", + "label": "Section(s)", + "name": "sections", + "aria-label": "", + "type": "flexible_content", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "acfe_flexible_advanced": 1, + "acfe_flexible_stylised_button": 0, + "acfe_flexible_hide_empty_message": 0, + "acfe_flexible_empty_message": "", + "acfe_flexible_layouts_templates": 0, + "acfe_flexible_layouts_placeholder": 0, + "acfe_flexible_layouts_thumbnails": 0, + "acfe_flexible_async": [], + "acfe_flexible_add_actions": [ + "copy", + "title", + "toggle" + ], + "acfe_flexible_remove_button": [], + "acfe_flexible_remove_top_actions": [], + "acfe_flexible_modal_edit": { + "acfe_flexible_modal_edit_enabled": "1", + "acfe_flexible_modal_edit_size": "xlarge" + }, + "acfe_flexible_modal": { + "acfe_flexible_modal_enabled": "0", + "acfe_flexible_modal_title": false, + "acfe_flexible_modal_size": "xlarge", + "acfe_flexible_modal_col": "4", + "acfe_flexible_modal_categories": false + }, + "acfe_flexible_modal_settings": { + "acfe_flexible_modal_settings_enabled": "1", + "acfe_flexible_modal_settings_size": "large", + "acfe_flexible_modal_settings_close": "1", + "acfe_flexible_modal_settings_close_label": "" + }, + "layouts": { + "layout_6852f761e95b0": { + "key": "layout_6852f761e95b0", + "name": "text_block", + "label": "Bloc de texte", + "display": "block", + "sub_fields": [ + { + "key": "field_68eeceb62b8a6", + "label": "Contenu", + "name": "content", + "aria-label": "", + "type": "wysiwyg", + "instructions": "", + "required": 1, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "default_value": "", + "acfe_wysiwyg_height": 300, + "acfe_wysiwyg_max_height": "", + "acfe_wysiwyg_valid_elements": "", + "acfe_wysiwyg_custom_style": "", + "acfe_wysiwyg_disable_wp_style": 0, + "acfe_wysiwyg_autoresize": 0, + "acfe_wysiwyg_disable_resize": 0, + "acfe_wysiwyg_remove_path": 0, + "acfe_wysiwyg_menubar": 0, + "acfe_wysiwyg_transparent": 0, + "acfe_wysiwyg_merge_toolbar": 0, + "acfe_wysiwyg_custom_toolbar": 0, + "required_message": "", + "allow_in_bindings": 0, + "tabs": "all", + "toolbar": "full", + "media_upload": 1, + "delay": 0, + "show_in_graphql": 1, + "graphql_description": "", + "graphql_field_name": "content", + "graphql_non_null": 1, + "acfe_wysiwyg_auto_init": 0, + "acfe_wysiwyg_min_height": 300, + "acfe_wysiwyg_toolbar_buttons": [] + } + ], + "min": "", + "max": "", + "acfe_flexible_modal_edit_size": "", + "acfe_flexible_settings": "", + "acfe_flexible_settings_size": "large", + "acfe_flexible_render_template": false, + "acfe_flexible_render_style": false, + "acfe_flexible_render_script": false, + "acfe_flexible_thumbnail": false, + "acfe_flexible_category": false + } + }, + "min": "", + "max": "", + "button_label": "Ajouter un élément", + "show_in_graphql": 1, + "graphql_description": "", + "graphql_field_name": "sections", + "graphql_non_null": 0, + "acfe_flexible_layouts_previews": false, + "acfe_flexible_close_button_label": "", + "acfe_flexible_layouts_state": false + } + ], + "location": [ + [ + { + "param": "abstract" + } + ] + ], + "menu_order": 0, + "position": "acf_after_title", + "style": "seamless", + "label_placement": "top", + "instruction_placement": "label", + "hide_on_screen": [ + "the_content" + ], + "active": true, + "description": "", + "show_in_rest": 0, + "display_title": "", + "acfe_autosync": [ + "json" + ], + "acfe_form": 0, + "show_in_graphql": 1, + "graphql_field_name": "GroupAbstractBuilder", + "map_graphql_types_from_location_rules": 0, + "graphql_types": "", + "acfe_meta": "", + "acfe_note": "", + "modified": 1768336919 +} diff --git a/wp-content/themes/moonshine/acf-json/group_post_page.json b/wp-content/themes/moonshine/acf-json/group_post_page.json new file mode 100644 index 0000000..05a5495 --- /dev/null +++ b/wp-content/themes/moonshine/acf-json/group_post_page.json @@ -0,0 +1,66 @@ +{ + "key": "group_post_page", + "title": "Post - Page", + "fields": [ + { + "key": "field_690cbda0abcbb", + "label": "Constructeur de page", + "name": "builder", + "aria-label": "", + "type": "clone", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "graphql_field_name": "builder", + "clone": [ + "group_abstract_builder" + ], + "display": "seamless", + "layout": "block", + "prefix_label": 0, + "prefix_name": 0, + "acfe_seamless_style": 0, + "acfe_clone_modal": 0, + "acfe_clone_modal_close": 0, + "acfe_clone_modal_button": "", + "acfe_clone_modal_size": "large" + } + ], + "location": [ + [ + { + "param": "post_type", + "operator": "==", + "value": "page" + } + ] + ], + "menu_order": 0, + "position": "normal", + "style": "seamless", + "label_placement": "top", + "instruction_placement": "label", + "hide_on_screen": [ + "the_content" + ], + "active": true, + "description": "", + "show_in_rest": 0, + "display_title": "", + "acfe_autosync": [ + "json" + ], + "acfe_form": 0, + "show_in_graphql": 1, + "graphql_field_name": "GroupPostPage", + "map_graphql_types_from_location_rules": 0, + "graphql_types": "", + "acfe_meta": "", + "acfe_note": "", + "modified": 1768336934 +} diff --git a/wp-content/themes/moonshine/app/components/builder/BuilderSections.fragment.gql b/wp-content/themes/moonshine/app/components/builder/BuilderSections.fragment.gql new file mode 100644 index 0000000..f982706 --- /dev/null +++ b/wp-content/themes/moonshine/app/components/builder/BuilderSections.fragment.gql @@ -0,0 +1,8 @@ +fragment BuilderSections on GroupAbstractBuilder_Fields { + sections { + __typename + ... on GroupAbstractBuilderSectionsTextBlockLayout { + ... SectionTextBlock + } + } +} diff --git a/wp-content/themes/moonshine/app/components/builder/BuilderSections.vue b/wp-content/themes/moonshine/app/components/builder/BuilderSections.vue new file mode 100644 index 0000000..abdf203 --- /dev/null +++ b/wp-content/themes/moonshine/app/components/builder/BuilderSections.vue @@ -0,0 +1,9 @@ + + + diff --git a/wp-content/themes/moonshine/app/components/nodes/NodePage.fragment.gql b/wp-content/themes/moonshine/app/components/nodes/NodePage.fragment.gql new file mode 100644 index 0000000..68d51fb --- /dev/null +++ b/wp-content/themes/moonshine/app/components/nodes/NodePage.fragment.gql @@ -0,0 +1,6 @@ +fragment NodePage on Page { + title + groupPostPage { + ... BuilderSections + } +} \ No newline at end of file diff --git a/wp-content/themes/moonshine/app/components/nodes/NodePage.global.vue b/wp-content/themes/moonshine/app/components/nodes/NodePage.global.vue new file mode 100644 index 0000000..b35206e --- /dev/null +++ b/wp-content/themes/moonshine/app/components/nodes/NodePage.global.vue @@ -0,0 +1,14 @@ + + + diff --git a/wp-content/themes/moonshine/app/components/sections/SectionTextBlock.fragment.gql b/wp-content/themes/moonshine/app/components/sections/SectionTextBlock.fragment.gql new file mode 100644 index 0000000..ff452af --- /dev/null +++ b/wp-content/themes/moonshine/app/components/sections/SectionTextBlock.fragment.gql @@ -0,0 +1,3 @@ +fragment SectionTextBlock on GroupAbstractBuilderSectionsTextBlockLayout { + content +} diff --git a/wp-content/themes/moonshine/app/components/sections/SectionTextBlock.vue b/wp-content/themes/moonshine/app/components/sections/SectionTextBlock.vue new file mode 100644 index 0000000..8f17098 --- /dev/null +++ b/wp-content/themes/moonshine/app/components/sections/SectionTextBlock.vue @@ -0,0 +1,9 @@ + + + diff --git a/wp-content/themes/moonshine/app/graphql/NodebyUri.query.gql b/wp-content/themes/moonshine/app/graphql/NodebyUri.query.gql new file mode 100644 index 0000000..1b59449 --- /dev/null +++ b/wp-content/themes/moonshine/app/graphql/NodebyUri.query.gql @@ -0,0 +1,8 @@ +query NodeByUri($uri: String!) { + nodeByUri(uri: $uri) { + __typename + ... on Page { + ... NodePage + } + } +} diff --git a/wp-content/themes/moonshine/app/pages/[...uri].vue b/wp-content/themes/moonshine/app/pages/[...uri].vue index 58a23b2..f023b65 100644 --- a/wp-content/themes/moonshine/app/pages/[...uri].vue +++ b/wp-content/themes/moonshine/app/pages/[...uri].vue @@ -1,6 +1,19 @@