From af5656ce81458ef7cbbb9a089cc38a0c1db67653 Mon Sep 17 00:00:00 2001 From: Julien Nahum Date: Wed, 20 Dec 2023 16:10:32 +0100 Subject: [PATCH] Fixed form creation --- .../{CodeInput.vue => CodeInput.client.vue} | 2 - client/components/forms/DateInput.vue | 3 - .../components/forms/components/VSelect.vue | 10 +- client/components/global/Dropdown.vue | 1 - client/components/global/Navbar.vue | 11 +- .../components/global/WorkspaceDropdown.vue | 3 +- .../open/editors/EditorRightSidebar.vue | 38 ++-- .../open/forms/components/FormEditor.vue | 85 ++++----- .../forms/components/FormFieldsEditor.vue | 5 +- .../form-components/AddFormBlock.vue | 13 +- .../form-components/FormAboutSubmission.vue | 2 + .../form-components/FormCustomCode.vue | 21 +-- .../form-components/FormInformation.vue | 7 +- .../form-components/FormNotifications.vue | 15 +- .../components/FormNotificationsOption.vue | 15 +- .../forms/fields/components/BlockOptions.vue | 4 +- .../forms/fields/components/FieldOptions.vue | 4 +- .../forms/create/CreateFormBaseModal.vue | 8 +- .../components/pages/forms/show/ExtraMenu.vue | 6 +- client/composables/forms/initForm.js | 54 ++++++ .../forms/validatePropertiesLogic.js | 14 ++ client/composables/useCrisp.js | 20 ++- client/pages/forms/{ => [slug]}/edit.vue | 8 +- .../pages/forms/{ => [slug]}/show/index.vue | 16 +- .../pages/forms/{ => [slug]}/show/share.vue | 16 +- .../pages/forms/{ => [slug]}/show/stats.vue | 4 +- .../forms/{ => [slug]}/show/submissions.vue | 4 +- client/pages/forms/create.vue | 164 ------------------ client/pages/forms/create/index.vue | 117 +++++++++++++ client/pages/home.vue | 18 +- client/stores/app.js | 7 + client/stores/forms.js | 15 +- .../forms/fields/components/FieldOptions.vue | 1 + .../forms/create/CreateFormBaseModal.vue | 8 +- 34 files changed, 363 insertions(+), 356 deletions(-) rename client/components/forms/{CodeInput.vue => CodeInput.client.vue} (98%) create mode 100644 client/composables/forms/initForm.js create mode 100644 client/composables/forms/validatePropertiesLogic.js rename client/pages/forms/{ => [slug]}/edit.vue (93%) rename client/pages/forms/{ => [slug]}/show/index.vue (94%) rename client/pages/forms/{ => [slug]}/show/share.vue (69%) rename client/pages/forms/{ => [slug]}/show/stats.vue (77%) rename client/pages/forms/{ => [slug]}/show/submissions.vue (73%) delete mode 100644 client/pages/forms/create.vue create mode 100644 client/pages/forms/create/index.vue diff --git a/client/components/forms/CodeInput.vue b/client/components/forms/CodeInput.client.vue similarity index 98% rename from client/components/forms/CodeInput.vue rename to client/components/forms/CodeInput.client.vue index f373f185..e276856f 100644 --- a/client/components/forms/CodeInput.vue +++ b/client/components/forms/CodeInput.client.vue @@ -36,8 +36,6 @@ import { inputProps, useFormInput } from './useFormInput.js' import InputWrapper from './components/InputWrapper.vue' export default { - name: 'CodeInput', - components: { InputWrapper, codemirror }, props: { ...inputProps diff --git a/client/components/forms/DateInput.vue b/client/components/forms/DateInput.vue index 35b953d2..44afd998 100644 --- a/client/components/forms/DateInput.vue +++ b/client/components/forms/DateInput.vue @@ -46,7 +46,6 @@ diff --git a/client/components/open/forms/components/FormEditor.vue b/client/components/open/forms/components/FormEditor.vue index 1a6ac964..91372cb1 100644 --- a/client/components/open/forms/components/FormEditor.vue +++ b/client/components/open/forms/components/FormEditor.vue @@ -77,17 +77,12 @@ /> -
+
diff --git a/client/pages/forms/create/index.vue b/client/pages/forms/create/index.vue new file mode 100644 index 00000000..d4e14199 --- /dev/null +++ b/client/pages/forms/create/index.vue @@ -0,0 +1,117 @@ + + + + diff --git a/client/pages/home.vue b/client/pages/home.vue index b2e5eaff..d3bbbbb0 100644 --- a/client/pages/home.vue +++ b/client/pages/home.vue @@ -133,14 +133,18 @@ definePageMeta({ const authStore = useAuthStore() const formsStore = useFormsStore() +formsStore.startLoading() const workspacesStore = useWorkspacesStore() onMounted(() => { - formsStore.load(workspacesStore.currentId) + if (!formsStore.allLoaded) { + console.log('starting to load') + formsStore.load(workspacesStore.currentId) + } }) // State -const {getAll: forms, loading: formsLoading} = storeToRefs(formsStore) +const {getAll: forms, loading: formsLoading, allTags} = storeToRefs(formsStore) const showEditFormModal = ref(false) const selectedForm = ref(null) const search = ref('') @@ -167,15 +171,7 @@ const viewForm = (form) => { const isFilteringForms = computed(() => { return (search.value !== '' && search.value !== null) || selectedTags.value.size > 0 }) -const allTags = computed(() => { - let tags = [] - forms.value.forEach((form) => { - if (form.tags && form.tags.length) { - tags = tags.concat(form.tags.split(',')) - } - }) - return [...new Set(tags)] -}) + const enrichedForms = computed(() => { let enrichedForms = forms.value.map((form) => { form.workspace = workspacesStore.getByKey(form.workspace_id) diff --git a/client/stores/app.js b/client/stores/app.js index 4eb2af4b..e40e8f89 100644 --- a/client/stores/app.js +++ b/client/stores/app.js @@ -5,6 +5,7 @@ import { nextTick } from 'vue' export const useAppStore = defineStore('app', { state: () => ({ layout: 'default', + navbarHidden: false, // App Loader loader: { @@ -17,6 +18,12 @@ export const useAppStore = defineStore('app', { } }), actions: { + hideNavbar () { + this.navbarHidden = true + }, + showNavbar () { + this.navbarHidden = false + }, setLayout (layout) { this.layout = layout ?? 'default' }, diff --git a/client/stores/forms.js b/client/stores/forms.js index 60b7fede..1191afb4 100644 --- a/client/stores/forms.js +++ b/client/stores/forms.js @@ -6,7 +6,7 @@ export const formsEndpoint = '/open/workspaces/{workspaceId}/forms' export const useFormsStore = defineStore('forms', () => { const contentStore = useContentStore('slug') - contentStore.startLoading() + const allLoaded = ref(false) const currentPage = ref(1) const load = (workspaceId) => { @@ -23,14 +23,27 @@ export const useFormsStore = defineStore('forms', () => { currentPage.value++ load(workspaceId) } else { + allLoaded.value = true contentStore.stopLoading() currentPage.value = 1 } }) } + const allTags = computed(() => { + let tags = [] + contentStore.getAll.value.forEach((form) => { + if (form.tags && form.tags.length) { + tags = tags.concat(form.tags.split(',')) + } + }) + return [...new Set(tags)] + }) + return { ...contentStore, + allLoaded, + allTags, load } }) diff --git a/resources/js/components/open/forms/fields/components/FieldOptions.vue b/resources/js/components/open/forms/fields/components/FieldOptions.vue index 72930136..52280aef 100644 --- a/resources/js/components/open/forms/fields/components/FieldOptions.vue +++ b/resources/js/components/open/forms/fields/components/FieldOptions.vue @@ -387,6 +387,7 @@