{"version":3,"sources":["webpack://ecoverso.org/./node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteralLoose.js","webpack://ecoverso.org/./src/rows/WPComments.tsx","webpack://ecoverso.org/./src/templates/groupElements/GroupSteps.tsx","webpack://ecoverso.org/./src/templates/groupElements/InContentTopBar.tsx","webpack://ecoverso.org/./src/templates/groupElements/Forms.tsx","webpack://ecoverso.org/./src/templates/crmWpBuyingGroup.tsx"],"names":["_taggedTemplateLiteralLoose","strings","raw","slice","adminGravatarMD5","isAdminGravatar","gravatarURL","i","length","indexOf","WPCommentsQuery","gql","WPCommentMutation","className","postId","comments","t","useI18next","dispatch","useDispatch","useState","replyOn","setReplyOn","createCommentOnTop","setCreateCommentOnTop","setCreateCommentOnBottom","WPClient","useContext","WPContext","useQuery","variables","id","client","loading","error","data","WPCommentCreate","refetch","databaseId","onCancel","isLoggedIn","useSelector","state","auth","identityId","payload","userData","firstName","displayName","lastName","userEmail","email","useMutation","createComment","mutationError","content","title","type","fieldType","required","fieldProperties","autoSize","minRows","maxRows","commentForm","row1","properties","author","nominativo","authorEmail","FormGenerator","onSubmit","values","setSubmitting","url","awsconfig","valuesToSubmit","authorUrl","commentOn","parent","then","actions","message","variant","catch","console","log","hideCancelButton","undefined","commentsCount","totalComments","setTotalComments","updatedComments","setUpdatedComments","useEffect","nodes","src","style","height","marginLeft","onClick","name","size","strokeWidth","renderComments","level","rendering","map","comment","parentId","replies","key","alt","node","Avatar","dangerouslySetInnerHTML","__html","date","format","parseFormat","getUnsubscribedStep","stepNumber","declination","onRegister","step","registrationStartDate","registrationEndDate","confirmationStartDate","confirmationEndDate","borderColor","active","icon","isFuture","children","differenceInCalendarDays","Date","Servizio","Auto","Convenzione","unclickable","isPast","getSubscribedStep","userInGroupData","currentStep","setCurrentStep","participationStartDate","participationEndDate","choosingStartDate","choosingEndDate","reachedStep","confirmationDate","choosingDate","participationDate","postProcess","count","isAfter","disabled","rdbGroupData","parseISO","stepsData","skipSteps","push","uniteChooseAndConfirm","Steps","steps","scrollToForm","userFirstName","barHeader","definitelyNotInterestedInBuying","to","notInterestInBuying","scrollToTop","setIsLoading","userInGroupDataRefetch","userId","subscribedUntil","isFormVisible","setIsFormVisible","preForm","setPreForm","afterForm","setAfterForm","form","setForm","formTitle","setFormTitle","formDescription","setFormDescription","formButton","setFormButton","isFormDisabled","setIsFormDisabled","formData","setFormData","localCurrentStep","updateUserInBuyingGroup","onCompleted","duration","onError","updateUserInGroup","updateUserInGroupLoading","UPDATE_PERSONAL_DETAILS","updateUserData","userDataLoading","createChosedVariant","createUserChosedVariant","createUserChosedVariantLoading","updateChosedVariant","updateUserChosedVariant","updateUserChosedVariantLoading","deleteChosedVariant","deleteUserChosedVariantLoading","intention","confirm","productsCount","Array","isArray","ChosedVariants","i_latestCanceledChoosing","latestChoosingDateCanceled","c","dateCanceled","idVariant","JSON","parse","userChoosingCustomValues","cancellationPhase","User","mobile","GoodOrServiceVariants","marginBottom","width","marginRight","rows","rowName","variantUserChoosingCustomFieldsDef","find","g","GoodOrService","GoodOrServiceType","userChoosingCustomFieldsDef","replace","placeholder","options","GoodsOrServices","Variants","label","v","value","filter","e","errMessages","savedIntention","marginTop","variantUserConfirmationCustomFieldsDef","userConfirmationCustomFieldsDef","reseller","Resellers","Organization","savedConfirm","updateUser_in_buying_groupInput","updateUserValues","window","dataLayer","event","groupUID","uidCMS","groupName","groupParticipationScope","groupDeclination","foundChosedVariantIds","chosedVariant","idBuyingGroup","idUser","quantity","dateChosed","stringify","dateConfirmed","foundChosedVariantId","forEach","updateChosed_variantInput","createChosed_variantInput","includes","confirmedVariant","idReseller","userConfirmationCustomValues","setTimeout","submitButtonText","onChange","newData","props","wpGroup","wordPress","buyingGroup","isAdmin","role","setReachedStep","appsync","getBuying_group","setRdbGroupData","setUserInGroupData","isLoading","setIsError","isFormLoading","setIsFormLoading","rowsPerStep","details","rowsStep0","rowsStep1","rowsStep2","rowsStep3","element","document","querySelector","scrollIntoView","behavior","block","setCurrentStepWrapper","originalStep","urlSuffix","getAppsyncClient","getAppSyncClientContext","getBuyingGroupAsParticipant","getBuyingGroup","pageContext","rdbId","rdbGroupLoading","rdbGroupError","rdbGroupDataFetch","searchUserInBuyingGroups","user_in_buying_group","skip","fetchPolicy","userInGroupLoading","userInGroupError","userInGroupDataFetch","searchUser_in_buying_groups","createUserInBuyingGroup","registerToGroup","registrationLoading","createUser_in_buying_groupInput","GridLayout","seo","description","metaDesc","image","imageHero","imageFile","publicURL","file","ManageGroup","buyingGroupId","as","row","DynamicRow","graphQLData","WPComments"],"mappings":"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","file":"component---src-templates-crm-wp-buying-group-tsx-723b788f502b98c5f9c9.js","sourcesContent":["export default function _taggedTemplateLiteralLoose(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n\n strings.raw = raw;\n return strings;\n}","import React, { useContext, useEffect, useState } from \"react\"\nimport { useSelector, useDispatch } from \"react-redux\"\nimport * as actions from \"../store/actions\"\n\nimport { WPContext } from \"../ApolloWrapper\"\nimport { useQuery, useMutation } from \"@apollo/client\"\nimport gql from \"graphql-tag\"\nimport { graphql } from \"gatsby\"\n\nimport { Link, FormatDate, useI18next } from \"../i18n\"\nimport { Icon, Loading } from \"../Layout/Components\"\n\nimport { nominativo, email } from \"../forms/fields/user\"\nimport FormGenerator from \"../Layout/Forms/FormGenerator\"\nimport Avatar from \"../Layout/Components/Avatar\"\n\nimport awsconfig from \"../aws-exports\"\n\nexport interface CommentData extends CommentFields {}\n\n//-----------------------------------------------------------------------------\n// Admin Gravatars\nconst adminGravatarMD5 = [\n \"accd4a7f43ced26bd4beb2b25919a02b\", // daniele@ecoverso.org\n \"1b10750f2ad148f8d5df10204e9ce965\", // flavia@ecoverso.org\n \"1247a86ea092f6b74fdd286da7d60f03\", // luca@ecoverso.org\n \"9457a948d286dad68d647d68caebfaa6\", // alfredo@ecoverso.org\n \"085b40cc227e236e2c5e588db8d9f2c8\", // lorenzo@ecoverso.org\n \"08079c81ffcc8b567bda0ac3b584acb6\", // manuel@ecoverso.org\n \"3e20503da0f21de272debf41e925cfcb\", // alfredo@gruppoacquistoibrido.it\n \"27c741df4641edfd3536916a54fcf2de\", // luca@gruppoacquistoibrido.it\n \"d22c9cbdd790ad9f0d885218ae73bcf7\", // lorenzo@gruppoacquistoibrido.it\n]\n\nconst isAdminGravatar = (gravatarURL: string) => {\n for (let i = 0; i < adminGravatarMD5.length; i++) {\n if (gravatarURL.indexOf(adminGravatarMD5[i]) != -1) return true\n }\n return false\n}\n//-----------------------------------------------------------------------------\n\ntype CommentFields = {\n id: string\n databaseId: number\n date: string\n dateGmt: string\n approved: boolean\n content: string\n gravatarURL: string\n parentId: string | null\n author: {\n node: {\n id: string\n name: string\n url: string\n }\n }\n replies: {\n nodes: T[]\n }\n}\n\ntype Props = {\n className?: string\n postId: number\n comments: CommentData[]\n}\n\nexport const WPComments: React.FC = ({ className, postId, comments }) => {\n const { t } = useI18next()\n const dispatch = useDispatch()\n\n const [replyOn, setReplyOn] = useState(null)\n const [createCommentOnTop, setCreateCommentOnTop] = useState(false)\n const [createCommentOnBottom, setCreateCommentOnBottom] = useState(true)\n\n //--------------------------------------------------------------------------------------------\n // Dynamic access to WP Comments\n const WPClient = useContext(WPContext)\n\n const { loading, error, data, refetch } = useQuery(WPCommentsQuery, {\n variables: { id: postId },\n client: WPClient,\n // fetchPolicy: \"no-cache\",\n })\n\n //--------------------------------------------------------------------------------------------\n // Reply\n\n const WPCommentCreate: React.FC<{ className?: string; postId: number; databaseId?: number; onCancel?: Function }> = ({\n className,\n postId,\n databaseId,\n onCancel,\n }) => {\n const isLoggedIn = useSelector((state) => state.auth.isLoggedIn)\n const identityId = useSelector((state) => (state.auth.payload.userData ? state.auth.payload.userData[\"custom:identityId\"] : null))\n const displayName = useSelector((state) => state.auth.payload.userData?.displayName)\n const firstName = useSelector((state) => state.auth.payload.userData?.firstName)\n const lastName = useSelector((state) => state.auth.payload.userData?.lastName)\n const userEmail = useSelector((state) => state.auth.payload.userData?.email)\n const [createComment, { error: mutationError }] = useMutation(WPCommentMutation, {\n client: WPClient,\n })\n\n const onSubmit = (values, setSubmitting) => {\n const url = `https://${awsconfig.aws_user_files_s3_bucket}.s3-${awsconfig.aws_user_files_s3_bucket_region}.amazonaws.com/protected/${identityId}/avatar.small.jpg`\n const valuesToSubmit = isLoggedIn ? { ...values, author: firstName + \" \" + lastName[0] + \".\", authorEmail: userEmail, authorUrl: url } : { ...values }\n valuesToSubmit.commentOn = postId\n\n if (databaseId) valuesToSubmit.parent = databaseId\n\n //console.log(\"Values: \", valuesToSubmit)\n createComment({ variables: valuesToSubmit })\n .then(() => {\n setSubmitting(false)\n setReplyOn(null)\n setCreateCommentOnTop(false)\n setCreateCommentOnBottom(false)\n dispatch(actions.notificationAdd({ message: t(\"Commento inviato con successo\"), variant: \"SuccessIcon\" }))\n })\n .catch((error) => {\n dispatch(actions.notificationAdd({ message: t(\"API Error\"), variant: \"DangerIcon\" }))\n console.log(\"API Error\", error, mutationError)\n })\n }\n\n const content = {\n title: \"Commento\",\n type: \"string\",\n fieldType: \"textarea\",\n required: true,\n fieldProperties: {\n //placeholder: \"Scrivi qui il tuo commento\",\n autoSize: { minRows: 5, maxRows: 10 },\n },\n }\n\n const commentForm = isLoggedIn\n ? { content }\n : {\n row1: {\n type: \"row\",\n properties: {\n author: { ...nominativo /*title: null, fieldProperties: { placeholder: \"Nome\" }*/ },\n authorEmail: { ...email /*title: null, fieldProperties: { placeholder: \"Email\" }*/ },\n },\n },\n content,\n }\n\n return \n }\n\n //--------------------------------------------------------------------------------------------\n // Comments Rendering\n\n let commentsCount = 0\n\n const [totalComments, setTotalComments] = useState(commentsCount)\n\n const renderComments = (comments: CommentData[], level = 1) => {\n if (level == 1) commentsCount = 0\n if (comments == null) return null\n const rendering = comments.map((comment, i) => {\n if (level == 1 && comment.parentId != null) return\n const replies = renderComments(comment.replies?.nodes, level + 1)\n commentsCount++\n return (\n
\n
\n \n {`Avatar\n \n
\n
\n
{comment.author.node.name}
\n
\n
\n
\n {level <= 2 && replyOn != comment.databaseId ? (\n
setReplyOn(comment.databaseId)}>\n {t(\"Rispondi\")}\n
\n ) : null}\n
\n \n
\n {replyOn == comment.databaseId ? setReplyOn(null)} /> : null}\n
{replies}
\n
\n
\n )\n })\n if (level == 1 && totalComments != commentsCount) setTotalComments(commentsCount)\n return rendering\n }\n\n //--------------------------------------------------------------------------------------------\n\n const [updatedComments, setUpdatedComments] = useState(comments)\n\n useEffect(() => {\n // Update comments with the ones from wordpress ;-)\n if (!loading && !error) {\n setUpdatedComments(data.comments.nodes)\n //console.log(data.comments.nodes)\n }\n }, [data, error, loading])\n\n return (\n
\n {/*
\n
\n
{JSON.stringify(loading, null, 2)}
\n
{JSON.stringify(error, null, 2)}
\n
{JSON.stringify(data, null, 2)}
\n
\n
*/}\n
\n
\n
\n {totalComments + \" \" + t(\"Commenti\")}\n {loading ? : null}\n
\n {!createCommentOnTop ? (\n
setCreateCommentOnTop(true)}>\n Aggiungi un commento \n
\n ) : null}\n
\n {createCommentOnTop ? setCreateCommentOnTop(false)} /> : null}\n {/* {renderedComments} */}\n {renderComments(updatedComments)}\n {setCreateCommentOnBottom ? (\n <>\n
{t(\"Commenta\")}
\n \n \n ) : null}\n
\n
\n )\n}\n\nconst WPCommentsQuery = gql`\n query GetWPComments($id: ID!) {\n comments(where: { contentId: $id, contentStatus: PUBLISH }, first: 1000) {\n nodes {\n ...recoursiveComment\n }\n }\n }\n\n fragment commentFields on Comment {\n id\n databaseId\n date\n dateGmt\n approved\n content\n gravatarURL\n parentId\n author {\n node {\n id\n name\n url\n }\n }\n }\n\n fragment recoursiveComment on Comment {\n ...commentFields\n replies(first: 1000) {\n nodes {\n ...commentFields\n replies(first: 1000) {\n nodes {\n ...commentFields\n replies(first: 1000) {\n nodes {\n ...commentFields\n replies(first: 1000) {\n nodes {\n ...commentFields\n }\n }\n }\n }\n }\n }\n }\n }\n }\n`\nconst WPCommentMutation = gql`\n mutation MyMutation($author: String!, $authorEmail: String!, $authorUrl: String, $commentOn: Int!, $parent: ID, $content: String!) {\n createComment(\n input: {\n author: $author\n authorEmail: $authorEmail\n authorUrl: $authorUrl\n commentOn: $commentOn\n content: $content\n parent: $parent\n clientMutationId: \"CreateComment\"\n }\n ) {\n success\n comment {\n databaseId\n approved\n }\n }\n }\n`\n\n// Query fragment to include in graphql\nexport const query = graphql`\n fragment commentFields on Wordpress_Comment {\n id\n databaseId\n date\n dateGmt\n approved\n content\n gravatarURL\n parentId\n author {\n node {\n id\n name\n url\n }\n }\n }\n fragment recoursiveComment on Wordpress_Comment {\n ...commentFields\n replies(first: 1000) {\n nodes {\n ...commentFields\n replies(first: 1000) {\n nodes {\n ...commentFields\n replies(first: 1000) {\n nodes {\n ...commentFields\n replies(first: 1000) {\n nodes {\n ...commentFields\n }\n }\n }\n }\n }\n }\n }\n }\n }\n fragment postComments on Wordpress_Post {\n comments(where: { orderby: COMMENT_DATE }, first: 1000) {\n nodes {\n ...recoursiveComment\n }\n }\n }\n fragment buyingGroupComments on Wordpress_BuyingGroup {\n comments(where: { orderby: COMMENT_DATE }, first: 1000) {\n nodes {\n ...recoursiveComment\n }\n }\n }\n`\n\nexport default WPComments\n","import React from \"react\"\nimport { useSelector, useDispatch } from \"react-redux\"\nimport { StepProps } from \"../../Layout/Components\"\nimport * as actions from \"../../store/actions\"\n\nimport { differenceInCalendarDays, isAfter, isFuture, isPast } from \"date-fns\"\nimport { FormatDate, Link, useI18next } from \"../../i18n\"\nimport { buying_group, user_in_buying_group } from \"../../API\"\nimport Steps from \"../../Layout/Components/Steps\"\nimport { TFunction } from \"i18next\"\n\nimport { buyingGroupData } from \"../crmWpBuyingGroup\"\nimport { parseISO } from \"date-fns/esm\"\n\ntype groupStepsProps = {\n currentStep: number\n rdbGroupData: buyingGroupData\n userInGroupData: user_in_buying_group | null\n onRegister: Function\n setCurrentStep: Function\n}\n\ntype groupDatesType = {\n pubblicationStartDate?: Date\n pubblicationEndDate?: Date\n registrationStartDate?: Date\n registrationEndDate?: Date\n participationStartDate?: Date\n participationEndDate?: Date\n choosingStartDate?: Date\n choosingEndDate?: Date\n confirmationStartDate?: Date\n confirmationEndDate?: Date\n resellerFlowStartDate?: Date\n resellerFlowEndDate?: Date\n}\n\n//---------------------------------------------------------------------------------------------------------------------------------------------------------\n//---------------------------------------------------------------------------------------------------------------------------------------------------------\n// Step per NON registrati al gruppo\nconst getUnsubscribedStep = (\n stepNumber: number,\n declination: string,\n { registrationStartDate, registrationEndDate, confirmationStartDate, confirmationEndDate }: groupDatesType,\n onRegister: Function,\n isLoggedIn: boolean,\n dispatch: Function\n) => {\n let step: StepProps\n\n switch (stepNumber) {\n case 1:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 1\n\n step = { title: \"Registrati\", borderColor: \"green\", active: true, icon: \"enter\" }\n if (!registrationStartDate) {\n step = {\n ...step,\n borderColor: \"orange\",\n icon: \"time\",\n children: (\n \n Presto potrai registrarti gratuitamente e senza impegno a{\" \"}\n {{ Servizio: \"questo servizio\", Auto: \"questo gruppo d'acquisto\", Convenzione: \"questa convenzione\" }[declination]}\n \n ),\n unclickable: true,\n }\n } else if (isFuture(registrationStartDate)) {\n step = {\n ...step,\n borderColor: \"orange\",\n icon: \"time\",\n children: (\n \n Fra {differenceInCalendarDays(registrationStartDate, new Date())} giorni potrai registrarti gratis e senza impegno a{\" \"}\n {declination == \"Servizio\" ? \"servizio\" : \"gruppo\"}\n {{ Servizio: \"questo servizio\", Auto: \"questo gruppo\", Convenzione: \"questa convenzione\" }[declination]}\n \n ),\n unclickable: true,\n }\n } else if (registrationEndDate == null) {\n step = isLoggedIn\n ? {\n ...step,\n children: (\n \n Registrati gratuitamente e senza impegno a{\" \"}\n {{ Servizio: \"questo servizio\", Auto: \"questo gruppo d'acquisto\", Convenzione: \"questa convenzione\" }[declination]}\n \n ),\n onClick: () => onRegister(),\n }\n : {\n ...step,\n children: (\n \n Accedi al sito per registrarti gratuitamente e senza impegno a{\" \"}\n {{ Servizio: \"questo servizio\", Auto: \"questo gruppo d'acquisto\", Convenzione: \"questa convenzione\" }[declination]}\n \n ),\n onClick: () => {\n dispatch(actions.setLoginModalVisibility(true))\n },\n }\n } else if (isFuture(registrationEndDate)) {\n step = {\n ...step,\n children: (\n \n {/*
\n {differenceInCalendarDays(new Date(), registrationEndDate)}\n
*/}\n
\n Hai solo {-differenceInCalendarDays(new Date(), registrationEndDate)} giorni per registrarti gratis e senza impegno a{\" \"}\n {{ Servizio: \"questo servizio\", Auto: \"questo gruppo\", Convenzione: \"questa convenzione\" }[declination]}\n
\n
\n ),\n onClick: () => onRegister(),\n }\n } else if (isPast(registrationEndDate)) {\n step = {\n ...step,\n borderColor: \"red\",\n icon: \"do-not-enter\",\n children: (\n \n Ci dispiace, le registrazioni a{\" \"}\n {{ Servizio: \"questo servizio\", Auto: \"questo gruppo d'acquisto\", Convenzione: \"questa convenzione\" }[declination]} sono chiuse\n \n ),\n unclickable: true,\n }\n }\n break\n case 2:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 2\n\n switch (declination) {\n case \"Servizio\":\n step = {\n title: \"Scopri\",\n borderColor: \"blue\",\n active: false,\n icon: \"cars\",\n children: (\n \n Scopri gli sconti e i fornitori di questo servizio\n \n ),\n unclickable: true,\n }\n break\n case \"Convenzione\":\n step = {\n title: \"Scopri\",\n borderColor: \"blue\",\n active: false,\n icon: \"cars\",\n children: (\n \n Scopri gli sconti e i fornitori di questa convenzione\n \n ),\n unclickable: true,\n }\n break\n case \"Auto\":\n default:\n step = {\n title: \"Scopri\",\n borderColor: \"blue\",\n active: false,\n icon: \"cars\",\n children: (\n \n Scopri gli sconti e i fornitori di questo gruppo d'acquisto\n \n ),\n unclickable: true,\n }\n }\n\n break\n case 3:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 3\n\n switch (declination) {\n case \"Servizio\":\n step = {\n title: \"Risparmia\",\n borderColor: \"green\",\n active: false,\n icon: \"euro\",\n children: (\n \n Acquista il tuo servizio{\" \"}\n {confirmationStartDate ? (\n \n dal {\" \"}\n \n ) : null}\n {confirmationEndDate ? (\n \n al {\" \"}\n \n ) : null}\n risparmiando\n \n ),\n unclickable: true,\n }\n break\n case \"Convenzione\":\n step = {\n title: \"Risparmia\",\n borderColor: \"green\",\n active: false,\n icon: \"euro\",\n children: (\n \n Aderisci alla convenzione{\" \"}\n {confirmationStartDate ? (\n \n dal {\" \"}\n \n ) : null}\n {confirmationEndDate ? (\n \n al {\" \"}\n \n ) : null}\n \n ),\n unclickable: true,\n }\n break\n case \"Auto\":\n default:\n step = {\n title: \"Risparmia\",\n borderColor: \"green\",\n active: false,\n icon: \"euro\",\n children: (\n \n Acquista la tua nuova auto{\" \"}\n {confirmationStartDate ? (\n \n dal {\" \"}\n \n ) : null}\n {confirmationEndDate ? (\n \n al {\" \"}\n \n ) : null}\n risparmiando in media ulteriori 1000€\n \n ),\n unclickable: true,\n }\n }\n\n break\n }\n\n return step\n}\n\n//---------------------------------------------------------------------------------------------------------------------------------------------------------\n//---------------------------------------------------------------------------------------------------------------------------------------------------------\n// Step per NON registrati al gruppo\nconst getSubscribedStep = (\n stepNumber: number,\n declination: string,\n { participationStartDate, participationEndDate, choosingStartDate, choosingEndDate, confirmationStartDate, confirmationEndDate }: groupDatesType,\n userInGroupData: user_in_buying_group,\n currentStep: number,\n setCurrentStep: Function,\n t: TFunction\n) => {\n let step: StepProps\n let reachedStep = userInGroupData.confirmationDate ? 4 : userInGroupData.choosingDate ? 3 : userInGroupData.participationDate ? 2 : 1\n\n // reachedStep = 4\n // participationStartDate = new Date(\"2021-03-10\")\n // participationEndDate = new Date(\"2021-03-16\")\n // choosingStartDate = new Date(\"2021-03-12\")\n // choosingEndDate = new Date(\"2021-03-17\")\n // confirmationStartDate = new Date(\"2021-03-14\")\n // confirmationEndDate = new Date(\"2021-03-19\")\n\n switch (stepNumber) {\n case 1:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 1\n\n step = {\n title: \"1. Partecipa\",\n borderColor: reachedStep > 1 ? \"green\" : isPast(participationEndDate) ? \"red\" : \"orange\",\n icon:\n reachedStep > 1\n ? \"check\"\n : isFuture(participationStartDate) || !participationStartDate\n ? \"time\"\n : isPast(participationEndDate)\n ? \"do-not-enter\"\n : \"edit\",\n children:\n reachedStep > 1 ? (\n Stai partecipando a questo gruppo d'acquisto\n ) : !participationStartDate ? (\n \n Coming Soon - presto pubblicheremo date e istruzioni di questo step\n \n ) : isFuture(participationStartDate) ? (\n \n ) : isPast(participationEndDate) ? (\n Ci dispiace, la partecipazione a questo gruppo d'acquisto è chiusa\n ) : !participationEndDate ? (\n isFuture(choosingStartDate) ? (\n \n ) : isPast(choosingStartDate) ? (\n Compila il form a fondo pagina per partecipare al gruppo d'acquisto, il prossimo step è già aperto\n ) : (\n Compila il form a fondo pagina per partecipare al gruppo d'acquisto\n )\n ) : // Il gruppo è aperto, check anche sulle date dello step successivo.\n isFuture(choosingStartDate) && isAfter(participationEndDate, choosingStartDate) ? (\n \n ) : isPast(choosingStartDate) ? (\n \n ) : (\n \n ),\n active: currentStep == 1,\n unclickable: currentStep == 1,\n disabled: reachedStep <= 1 && (isFuture(participationStartDate) || !participationStartDate),\n onClick: () => {\n setCurrentStep(1)\n },\n }\n\n break\n case 2:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 2\n\n step = {\n title: \"2. Scegli\",\n borderColor: reachedStep > 2 ? \"green\" : isPast(choosingEndDate) ? \"red\" : reachedStep < 2 ? \"blue\" : \"orange\",\n icon: reachedStep > 2 ? \"check\" : isFuture(choosingStartDate) || !choosingStartDate ? \"time\" : isPast(choosingEndDate) ? \"do-not-enter\" : \"cars\",\n children:\n reachedStep > 2 ? (\n Hai effettuato la tua scelta\n ) : !choosingStartDate ? (\n \n Coming Soon - presto pubblicheremo date e istruzioni di questo step\n \n ) : isFuture(choosingStartDate) ? (\n \n ) : isPast(choosingEndDate) ? (\n Ci dispiace, questo step è chiuso\n ) : !choosingEndDate ? (\n isFuture(confirmationStartDate) ? (\n \n ) : isPast(confirmationStartDate) ? (\n Compila il form a fondo pagina, il prossimo step è già aperto\n ) : (\n Compila il form a fondo pagina\n )\n ) : // Il gruppo è aperto, check anche sulle date dello step successivo.\n isFuture(confirmationStartDate) && isAfter(choosingEndDate, confirmationStartDate) ? (\n \n ) : isPast(confirmationStartDate) ? (\n \n ) : (\n \n ),\n\n active: currentStep == 2,\n unclickable: currentStep == 2,\n disabled: reachedStep <= 2 && (isFuture(choosingStartDate) || !choosingStartDate),\n onClick: () => {\n setCurrentStep(2)\n },\n }\n\n break\n case 3:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 3\n\n step = {\n title: \"3. Conferma\",\n borderColor: reachedStep > 3 ? \"green\" : isPast(confirmationEndDate) ? \"red\" : reachedStep < 3 ? \"blue\" : \"orange\",\n icon:\n reachedStep > 3\n ? \"check\"\n : isFuture(confirmationStartDate) || !confirmationStartDate\n ? \"time\"\n : isPast(confirmationEndDate)\n ? \"do-not-enter\"\n : \"euro\",\n children:\n reachedStep > 3 ? (\n Hai confermato la tua scelta\n ) : !confirmationStartDate ? (\n \n Coming Soon - presto pubblicheremo date e istruzioni di questo step\n \n ) : isFuture(confirmationStartDate) ? (\n \n ) : isPast(confirmationEndDate) ? (\n Ci dispiace, questo step è chiuso\n ) : !confirmationEndDate ? (\n Compila il form a fondo pagina per confermare\n ) : (\n \n ),\n active: currentStep == 3,\n unclickable: currentStep == 3,\n disabled: reachedStep <= 3 && (isFuture(confirmationStartDate) || !confirmationStartDate),\n onClick: () => {\n setCurrentStep(3)\n },\n }\n\n break\n }\n\n return step\n}\n\n//---------------------------------------------------------------------------------------------------------------------------------------------------------\n//---------------------------------------------------------------------------------------------------------------------------------------------------------\n// Build the steps\n\nconst GroupSteps: React.FC = ({ currentStep, rdbGroupData, userInGroupData, onRegister, setCurrentStep }) => {\n const { t } = useI18next()\n\n const isLoggedIn = useSelector((state) => state.auth.isLoggedIn)\n const dispatch = useDispatch()\n\n const registrationStartDate = rdbGroupData.registrationStartDate != null ? parseISO(rdbGroupData.registrationStartDate) : null\n const registrationEndDate = rdbGroupData.registrationEndDate != null ? parseISO(rdbGroupData.registrationEndDate) : null\n const participationStartDate = rdbGroupData.participationStartDate != null ? parseISO(rdbGroupData.participationStartDate) : null\n const participationEndDate = rdbGroupData.participationEndDate != null ? parseISO(rdbGroupData.participationEndDate) : null\n const choosingStartDate = rdbGroupData.choosingStartDate != null ? parseISO(rdbGroupData.choosingStartDate) : null\n const choosingEndDate = rdbGroupData.choosingEndDate != null ? parseISO(rdbGroupData.choosingEndDate) : null\n const confirmationStartDate = rdbGroupData.confirmationStartDate != null ? parseISO(rdbGroupData.confirmationStartDate) : null\n const confirmationEndDate = rdbGroupData.confirmationEndDate != null ? parseISO(rdbGroupData.confirmationEndDate) : null\n\n let stepsData: StepProps[] = []\n let skipSteps = false\n\n if (userInGroupData == null) {\n stepsData.push(\n getUnsubscribedStep(\n 1,\n rdbGroupData.declination,\n { registrationStartDate, registrationEndDate, confirmationStartDate, confirmationEndDate },\n onRegister,\n isLoggedIn,\n dispatch\n )\n )\n stepsData.push(\n getUnsubscribedStep(\n 2,\n rdbGroupData.declination,\n { registrationStartDate, registrationEndDate, confirmationStartDate, confirmationEndDate },\n onRegister,\n isLoggedIn,\n dispatch\n )\n )\n stepsData.push(\n getUnsubscribedStep(\n 3,\n rdbGroupData.declination,\n { registrationStartDate, registrationEndDate, confirmationStartDate, confirmationEndDate },\n onRegister,\n isLoggedIn,\n dispatch\n )\n )\n } else {\n // Non visualizzare gli step per alcune tipologie di gruppo\n if (rdbGroupData.uniteChooseAndConfirm) skipSteps = true\n\n stepsData.push(\n getSubscribedStep(\n 1,\n rdbGroupData.declination,\n { participationStartDate, participationEndDate, choosingStartDate, choosingEndDate, confirmationStartDate, confirmationEndDate },\n userInGroupData,\n currentStep,\n setCurrentStep,\n t\n )\n )\n stepsData.push(\n getSubscribedStep(\n 2,\n rdbGroupData.declination,\n { participationStartDate, participationEndDate, choosingStartDate, choosingEndDate, confirmationStartDate, confirmationEndDate },\n userInGroupData,\n currentStep,\n setCurrentStep,\n t\n )\n )\n stepsData.push(\n getSubscribedStep(\n 3,\n rdbGroupData.declination,\n { participationStartDate, participationEndDate, choosingStartDate, choosingEndDate, confirmationStartDate, confirmationEndDate },\n userInGroupData,\n currentStep,\n setCurrentStep,\n t\n )\n )\n }\n\n return !skipSteps ? : null\n}\n\nexport default GroupSteps\n","import React from \"react\"\nimport { useSelector, useDispatch } from \"react-redux\"\nimport { FormatDate, Link, useI18next } from \"../../i18n\"\nimport * as actions from \"../../store/actions\"\nimport { buying_group, user_in_buying_group } from \"../../API\"\nimport { Icon, Title, Breadcrumbs, Image, ImageData } from \"../../Layout/Components\"\nimport { differenceInCalendarDays, isFuture, isPast, parseISO } from \"date-fns\"\n\nimport { buyingGroupData } from \"../crmWpBuyingGroup\"\n\ntype InContentTopBarProps = {\n currentStep: number\n rdbGroupData: buyingGroupData\n userInGroupData: user_in_buying_group | null\n onRegister: Function\n setCurrentStep: Function\n scrollToForm: Function\n}\n\nconst InContentTopBar: React.FC = ({ currentStep, rdbGroupData, userInGroupData, onRegister, setCurrentStep, scrollToForm }) => {\n const dispatch = useDispatch()\n const { t } = useI18next()\n\n const isLoggedIn = useSelector((state) => state.auth.isLoggedIn)\n const userFirstName = useSelector((state) => state.auth.payload?.userData?.firstName)\n\n let registrationStartDate = rdbGroupData.registrationStartDate != null ? parseISO(rdbGroupData.registrationStartDate) : null\n let registrationEndDate = rdbGroupData.registrationEndDate != null ? parseISO(rdbGroupData.registrationEndDate) : null\n let participationStartDate = rdbGroupData.participationStartDate != null ? parseISO(rdbGroupData.participationStartDate) : null\n let participationEndDate = rdbGroupData.participationEndDate != null ? parseISO(rdbGroupData.participationEndDate) : null\n let choosingStartDate = rdbGroupData.choosingStartDate != null ? parseISO(rdbGroupData.choosingStartDate) : null\n let choosingEndDate = rdbGroupData.choosingEndDate != null ? parseISO(rdbGroupData.choosingEndDate) : null\n let confirmationStartDate = rdbGroupData.confirmationStartDate != null ? parseISO(rdbGroupData.confirmationStartDate) : null\n let confirmationEndDate = rdbGroupData.confirmationEndDate != null ? parseISO(rdbGroupData.confirmationEndDate) : null\n\n const declination = rdbGroupData.declination\n\n let barHeader = null\n let borderColor = \"blue\"\n if (userInGroupData == null) {\n //------------------------------------------------------------------------------------------------------------------------------\n // User NOT in group + Registrations open > Invite user to register\n if (isPast(registrationStartDate) && (isFuture(registrationEndDate) || registrationEndDate == null)) {\n barHeader = isLoggedIn ? (\n \n Ciao {userFirstName}, entra anche tu in{\" \"}\n {{ Servizio: \"questo servizio\", Auto: \"questo gruppo d'acquisto\", Convenzione: \"questa convenzione\" }[declination]} gratuitamente e senza impegno\n
onRegister()}>\n {t(\"Entra\")} \n
\n
\n ) : (\n \n Per entrare in {{ Servizio: \"questo servizio\", Auto: \"questo gruppo d'acquisto\", Convenzione: \"questa convenzione\" }[declination]} accedi al sito\n
dispatch(actions.setLoginModalVisibility(true))}>\n {t(\"Accedi\")} \n
\n
\n )\n }\n } else {\n let reachedStep = userInGroupData.confirmationDate ? 4 : userInGroupData.choosingDate ? 3 : userInGroupData.participationDate ? 2 : 1\n\n // reachedStep = 4\n // participationStartDate = new Date(\"2021-03-10\")\n // participationEndDate = new Date(\"2021-03-16\")\n // choosingStartDate = new Date(\"2021-03-12\")\n // choosingEndDate = new Date(\"2021-03-17\")\n // confirmationStartDate = new Date(\"2021-03-14\")\n // confirmationEndDate = new Date(\"2021-03-19\")\n\n if (rdbGroupData.uniteChooseAndConfirm) {\n if (reachedStep > 1) {\n barHeader = Hai confermato la tua scelta\n borderColor = \"green\"\n if (userInGroupData.definitelyNotInterestedInBuying) {\n borderColor = \"orange\"\n barHeader = (\n \n Hai scelto di non acquistare, se cambi idea torna al form\n
scrollToForm()}>\n {t(\"Vai al form\")} \n
\n
\n )\n }\n } else {\n barHeader = (\n \n Leggi le istruzioni e compila il form a fondo pagina per partecipare{\" \"}\n {{ Servizio: \"al servizio\", Auto: \"al gruppo d'acquisto\", Convenzione: \"alla convenzione\" }[declination]}\n {/* */}\n
scrollToForm()}>\n {t(\"Vai al form\")} \n
\n {/*
*/}\n
\n )\n borderColor = \"orange\"\n }\n } else {\n switch (currentStep) {\n case 1:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 1\n\n if (reachedStep > 1) {\n if (reachedStep < 4) {\n barHeader = (\n \n Stai partecipando a {{ Servizio: \"questo servizio\", Auto: \"questo gruppo d'acquisto\", Convenzione: \"questa convenzione\" }[declination]},\n prosegui con lo step {reachedStep}\n
setCurrentStep(reachedStep)}>\n Vai allo step {reachedStep} \n
\n
\n )\n borderColor = \"green\"\n }\n } else if (isFuture(participationStartDate) || !participationStartDate) {\n barHeader = (\n \n Attendi l'apertura di questo step per compilare il form a fondo pagina per partecipare\n
\n {t(\"Vai al form\")} \n
\n
\n )\n borderColor = \"grey\"\n } else if (isPast(participationEndDate)) {\n switch (declination) {\n case \"Servizio\":\n barHeader = (\n \n Questo servizio è chiuso, ma potrebbe essercene uno simile già aperto!\n \n {t(\"Vai ai Servizi Plus\")}\n \n \n )\n break\n case \"Convenzione\":\n barHeader = (\n \n Questa convenzione è chiusa, ma potrebbe essercene uno simile già aperta!\n \n {t(\"Vai ai Servizi Plus\")}\n \n \n )\n break\n case \"Auto\":\n barHeader = (\n \n Questo gruppo d'acquisto è chiuso, ma potrebbe essercene uno simile già aperto!\n \n {t(\"Vai ai gruppi d'acquisto\")}\n \n \n )\n break\n }\n borderColor = \"red\"\n } else {\n barHeader = (\n \n Leggi le istruzioni e compila il form a fondo pagina per partecipare{\" \"}\n {{ Servizio: \"al servizio\", Auto: \"al gruppo d'acquisto\", Convenzione: \"alla convenzione\" }[declination]}\n {/* */}\n
scrollToForm()}>\n {t(\"Vai al form\")} \n
\n {/*
*/}\n
\n )\n borderColor = \"orange\"\n }\n break\n\n case 2:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 2\n\n if (reachedStep < 2) {\n barHeader = (\n \n Per proseguire devi prima completare lo step {reachedStep}\n
setCurrentStep(reachedStep)}>\n Vai allo step {reachedStep} \n
\n
\n )\n borderColor = \"orange\"\n } else if (reachedStep > 2) {\n if (reachedStep < 4) {\n if (userInGroupData.notInterestInBuying) {\n borderColor = \"orange\"\n barHeader = (\n \n Hai scelto solo informazioni, se cambi idea torna al form qui sotto\n
setCurrentStep(reachedStep)}>\n Vai allo step {reachedStep} \n
\n
\n )\n } else {\n barHeader = (\n \n Hai già effettuato la tua scelta, prosegui con lo step {reachedStep}\n
setCurrentStep(reachedStep)}>\n Vai allo step {reachedStep} \n
\n
\n )\n borderColor = \"green\"\n }\n }\n } else if (isFuture(choosingStartDate) || !choosingStartDate) {\n barHeader = (\n \n Attendi l'apertura di questo step per compilare il form a fondo pagina\n
\n {t(\"Vai al form\")} \n
\n
\n )\n borderColor = \"grey\"\n } else if (isPast(choosingEndDate)) {\n switch (declination) {\n case \"Servizio\":\n barHeader = (\n \n Questo servizio è chiuso, ma potrebbe essercene uno simile già aperto!\n \n {t(\"Vai ai Servizi Plus\")}\n \n \n )\n break\n case \"Convenzione\":\n barHeader = (\n \n Questa convenzione è chiusa, ma potrebbe essercene uno simile già aperta!\n \n {t(\"Vai ai Servizi Plus\")}\n \n \n )\n break\n case \"Auto\":\n barHeader = (\n \n Questo gruppo d'acquisto è chiuso, ma potrebbe essercene uno simile già aperto!\n \n {t(\"Vai ai gruppi d'acquisto\")}\n \n \n )\n }\n borderColor = \"red\"\n } else {\n barHeader = (\n \n Leggi le istruzioni e compila il form a fondo pagina per proseguire\n
scrollToForm()}>\n {t(\"Vai al form\")} \n
\n
\n )\n borderColor = \"orange\"\n }\n break\n\n case 3:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 3\n\n if (reachedStep < 3) {\n barHeader = (\n \n Per proseguire devi prima completare lo step {reachedStep}\n
setCurrentStep(reachedStep)}>\n Vai allo step {reachedStep} \n
\n
\n )\n borderColor = \"orange\"\n } else if (reachedStep > 3) {\n barHeader = Hai confermato la tua scelta\n borderColor = \"green\"\n if (userInGroupData.definitelyNotInterestedInBuying) {\n borderColor = \"orange\"\n barHeader = (\n \n Hai scelto di non acquistare, se cambi idea torna al form\n
scrollToForm()}>\n {t(\"Vai al form\")} \n
\n
\n )\n }\n } else if (isFuture(confirmationStartDate) || !confirmationStartDate) {\n barHeader = (\n \n Attendi l'apertura di questo step per compilare il form a fondo pagina\n
\n {t(\"Vai al form\")} \n
\n
\n )\n borderColor = \"grey\"\n } else if (isPast(confirmationEndDate)) {\n switch (declination) {\n case \"Servizio\":\n barHeader = (\n \n Questo servizio è chiuso, ma potrebbe essercene uno simile già aperto!\n \n {t(\"Vai ai Servizi Plus\")}\n \n \n )\n break\n case \"Convenzione\":\n barHeader = (\n \n Questa convenzione è chiusa, ma potrebbe essercene uno simile già aperta!\n \n {t(\"Vai ai Servizi Plus\")}\n \n \n )\n break\n case \"Auto\":\n barHeader = (\n \n Questo gruppo d'acquisto è chiuso, ma potrebbe essercene uno simile già aperto!\n \n {t(\"Vai ai gruppi d'acquisto\")}\n \n \n )\n }\n borderColor = \"red\"\n } else {\n barHeader = (\n \n Leggi le istruzioni e compila il form a fondo pagina per proseguire\n
scrollToForm()}>\n {t(\"Vai al form\")} \n
\n
\n )\n borderColor = \"orange\"\n }\n break\n }\n }\n }\n\n return barHeader ? (\n
\n
\n {barHeader}\n
\n
\n ) : null\n}\n\nexport default InContentTopBar\n","import React, { useContext, useEffect, useState } from \"react\"\nimport { useSelector, useDispatch } from \"react-redux\"\nimport * as actions from \"../../store/actions\"\n\nimport { FormatDate, Link, useI18next } from \"../../i18n\"\n\nimport gql from \"graphql-tag\"\nimport { useMutation, useQuery } from \"@apollo/client\"\n\nimport { buying_group, user_in_buying_group } from \"../../API\"\nimport { GET_PERSONAL_DETAILS, UPDATE_PERSONAL_DETAILS, createChosedVariant, updateChosedVariant } from \"../../graphql.my/queries\"\nimport { deleteChosedVariant, updateUserInBuyingGroup } from \"../../graphql/mutations\"\n\nimport { firstName, email, readPrivacy, mobile, state } from \"../../forms/fields/user\"\nimport FormGenerator from \"../../Layout/Forms/FormGenerator\"\nimport InContentTopBar from \"./InContentTopBar\"\nimport { Icon } from \"../../Layout/Components\"\n\nimport { buyingGroupData } from \"../crmWpBuyingGroup\"\nimport { FormPropertiesData } from \"../../Layout/Forms/FormDataType\"\n\nimport _ from \"lodash\"\n\nimport { differenceInCalendarDays, isPast, isFuture } from \"date-fns\"\nimport custom_userChoosingAuto from \"./custom-forms-jsons/userChoosing-auto.json\"\nimport custom_userConfirmationAuto from \"./custom-forms-jsons/userConfirmation-auto.json\"\nimport { parseISO } from \"date-fns/esm\"\n\ntype props = {\n currentStep: number\n rdbGroupData: buyingGroupData\n userInGroupData: user_in_buying_group | null\n setCurrentStep: Function\n scrollToTop: Function\n setIsLoading: Function\n userInGroupDataRefetch: Function\n}\n\nconst Forms: React.FC = ({ currentStep, rdbGroupData, userInGroupData, setCurrentStep, scrollToTop, setIsLoading, userInGroupDataRefetch }) => {\n const { t } = useI18next()\n const dispatch = useDispatch()\n\n const userId = useSelector((state) => state.auth.payload?.userData?.userId)\n const subscribedUntil = useSelector((state) => state.auth.payload.userData?.subscribedUntil)\n const [isFormVisible, setIsFormVisible] = useState(false)\n const [preForm, setPreForm] = useState(\"\" as any)\n const [afterForm, setAfterForm] = useState(\"\" as any)\n const [form, setForm] = useState({})\n const [formTitle, setFormTitle] = useState(\"\")\n const [formDescription, setFormDescription] = useState(\"\")\n const [formButton, setFormButton] = useState(\"\")\n const [isFormDisabled, setIsFormDisabled] = useState(false)\n const [formData, setFormData] = useState({} as any)\n\n let registrationStartDate = rdbGroupData.registrationStartDate != null ? parseISO(rdbGroupData.registrationStartDate) : null\n let registrationEndDate = rdbGroupData.registrationEndDate != null ? parseISO(rdbGroupData.registrationEndDate) : null\n let participationStartDate = rdbGroupData.participationStartDate != null ? parseISO(rdbGroupData.participationStartDate) : null\n let participationEndDate = rdbGroupData.participationEndDate != null ? parseISO(rdbGroupData.participationEndDate) : null\n let choosingStartDate = rdbGroupData.choosingStartDate != null ? parseISO(rdbGroupData.choosingStartDate) : null\n let choosingEndDate = rdbGroupData.choosingEndDate != null ? parseISO(rdbGroupData.choosingEndDate) : null\n let confirmationStartDate = rdbGroupData.confirmationStartDate != null ? parseISO(rdbGroupData.confirmationStartDate) : null\n let confirmationEndDate = rdbGroupData.confirmationEndDate != null ? parseISO(rdbGroupData.confirmationEndDate) : null\n\n //---------------------------------------------------------------------------------------------------------------------------------------------------------\n // Handle different kind of group by simulating other steps\n\n // uniteChooseAndConfirm groups have a unique step 4 from a Forms.tsx point of view ;-)\n const localCurrentStep = rdbGroupData.uniteChooseAndConfirm ? 4 : currentStep\n\n //---------------------------------------------------------------------------------------------------------------------------------------------------------\n //---------------------------------------------------------------------------------------------------------------------------------------------------------\n // Data Layer\n\n let reachedStep = userInGroupData.confirmationDate ? 4 : userInGroupData.choosingDate ? 3 : userInGroupData.participationDate ? 2 : 1\n\n const [updateUserInGroup, { loading: updateUserInGroupLoading }] = useMutation(gql(updateUserInBuyingGroup), {\n onCompleted: () => {\n userInGroupDataRefetch()\n dispatch(\n actions.notificationAdd({\n message: \"Nuove informazioni salvate\",\n variant: \"SmileIcon\",\n duration: 30,\n })\n )\n scrollToTop()\n },\n onError: (error) => {\n dispatch(actions.notificationAdd({ message: t(\"API Error\"), variant: \"DangerIcon\" }))\n console.log(\"API Error\", error)\n return null\n },\n })\n\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 1\n\n // Update data after submit\n const [updateUserData, { loading: userDataLoading, error: mutationError }] = useMutation(gql(UPDATE_PERSONAL_DETAILS), {\n onError: (error) => {\n dispatch(actions.notificationAdd({ message: t(\"API Error\"), variant: \"DangerIcon\" }))\n console.log(\"API Error\", error, mutationError)\n },\n })\n\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 2\n\n const [createUserChosedVariant, { loading: createUserChosedVariantLoading }] = useMutation(gql(createChosedVariant), {\n onError: (error) => {\n dispatch(actions.notificationAdd({ message: t(\"API Error\"), variant: \"DangerIcon\" }))\n console.log(\"API Error\", error)\n return null\n },\n })\n\n const [updateUserChosedVariant, { loading: updateUserChosedVariantLoading }] = useMutation(gql(updateChosedVariant), {\n onError: (error) => {\n dispatch(actions.notificationAdd({ message: t(\"API Error\"), variant: \"DangerIcon\" }))\n console.log(\"API Error\", error)\n return null\n },\n })\n\n const [deleteUserChosedVariant, { loading: deleteUserChosedVariantLoading }] = useMutation(gql(deleteChosedVariant), {\n onError: (error) => {\n dispatch(actions.notificationAdd({ message: t(\"API Error\"), variant: \"DangerIcon\" }))\n console.log(\"API Error\", error)\n return null\n },\n })\n\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 3\n\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n\n useEffect(() => {\n setIsLoading(\n updateUserInGroupLoading || userDataLoading || createUserChosedVariantLoading || updateUserChosedVariantLoading || deleteUserChosedVariantLoading\n )\n }, [updateUserInGroupLoading, userDataLoading, createUserChosedVariantLoading, updateUserChosedVariantLoading, deleteUserChosedVariantLoading])\n\n //---------------------------------------------------------------------------------------------------------------------------------------------------------\n //---------------------------------------------------------------------------------------------------------------------------------------------------------\n // Form Data Load\n\n useEffect(() => {\n let data: any = {}\n data.intention = userInGroupData.choosingDate ? (userInGroupData.notInterestInBuying ? \"informazioni\" : \"acquisto\") : null\n data.confirm = userInGroupData.confirmationDate ? (userInGroupData.definitelyNotInterestedInBuying ? \"no\" : \"si\") : null\n switch (localCurrentStep) {\n case 1:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 1\n\n break\n case 2:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 2\n\n if (userInGroupData.choosingDate && !userInGroupData.notInterestInBuying) {\n data.values = {}\n let productsCount = 0\n if (Array.isArray(userInGroupData.ChosedVariants)) {\n // Select chosedVariant with dateCanceled = null or the latest canceled one with cancelationPhase = \"choosing\"\n let i_latestCanceledChoosing = -1\n let latestChoosingDateCanceled = \"\"\n for (let i = 0; i < userInGroupData.ChosedVariants.length; i++) {\n const c = userInGroupData.ChosedVariants[i]\n if (!c.dateCanceled) {\n data.values[`products_${productsCount}`] = { variant: c.idVariant, ...JSON.parse(c.userChoosingCustomValues) }\n productsCount++\n }\n if (c.cancellationPhase == \"confirmation\" && c.dateCanceled > latestChoosingDateCanceled) {\n latestChoosingDateCanceled = c.dateCanceled\n i_latestCanceledChoosing = i\n }\n }\n // if non current (dateCanceled = null) then last canceled\n if (productsCount == 0 && i_latestCanceledChoosing != -1) {\n const c = userInGroupData.ChosedVariants[i_latestCanceledChoosing]\n data.values[`products_${productsCount}`] = { variant: c.idVariant, ...JSON.parse(c.userChoosingCustomValues) }\n productsCount++\n }\n }\n }\n\n break\n case 3:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 3\n if (userInGroupData.choosingDate && !userInGroupData.notInterestInBuying) {\n data.values = {}\n let productsCount = 0\n if (Array.isArray(userInGroupData.ChosedVariants)) {\n // Select chosedVariant with dateCanceled = null or the latest canceled one with cancelationPhase = \"choosing\"\n let i_latestCanceledChoosing = -1\n let latestChoosingDateCanceled = \"\"\n for (let i = 0; i < userInGroupData.ChosedVariants.length; i++) {\n const c = userInGroupData.ChosedVariants[i]\n if (!c.dateCanceled) {\n data.values[`products_${productsCount}`] = { variant: c.idVariant, ...JSON.parse(c.userChoosingCustomValues) }\n productsCount++\n }\n if (c.cancellationPhase == \"confirmation\" && c.dateCanceled > latestChoosingDateCanceled) {\n latestChoosingDateCanceled = c.dateCanceled\n i_latestCanceledChoosing = i\n }\n }\n // if non current (dateCanceled = null) then last canceled\n if (productsCount == 0 && i_latestCanceledChoosing != -1) {\n const c = userInGroupData.ChosedVariants[i_latestCanceledChoosing]\n data.values[`products_${productsCount}`] = { variant: c.idVariant, ...JSON.parse(c.userChoosingCustomValues) }\n productsCount++\n }\n }\n }\n break\n case 4:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step unico\n if (userInGroupData.choosingDate && !userInGroupData.notInterestInBuying) {\n data.values = {}\n let productsCount = 0\n if (Array.isArray(userInGroupData.ChosedVariants)) {\n // Select chosedVariant with dateCanceled = null or the latest canceled one with cancelationPhase = \"choosing\"\n let i_latestCanceledChoosing = -1\n let latestChoosingDateCanceled = \"\"\n for (let i = 0; i < userInGroupData.ChosedVariants.length; i++) {\n const c = userInGroupData.ChosedVariants[i]\n if (!c.dateCanceled) {\n data.values[`products_${productsCount}`] = { variant: c.idVariant, ...JSON.parse(c.userChoosingCustomValues) }\n productsCount++\n }\n if (c.cancellationPhase == \"confirmation\" && c.dateCanceled > latestChoosingDateCanceled) {\n latestChoosingDateCanceled = c.dateCanceled\n i_latestCanceledChoosing = i\n }\n }\n // if non current (dateCanceled = null) then last canceled\n if (productsCount == 0 && i_latestCanceledChoosing != -1) {\n const c = userInGroupData.ChosedVariants[i_latestCanceledChoosing]\n data.values[`products_${productsCount}`] = { variant: c.idVariant, ...JSON.parse(c.userChoosingCustomValues) }\n productsCount++\n }\n }\n }\n break\n }\n setFormData(data)\n }, [localCurrentStep, userInGroupData])\n\n //---------------------------------------------------------------------------------------------------------------------------------------------------------\n //---------------------------------------------------------------------------------------------------------------------------------------------------------\n // Form Generation\n\n useEffect(() => {\n let form: FormPropertiesData = {}\n\n switch (localCurrentStep) {\n case 1:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 1\n\n setIsFormVisible(reachedStep == 1)\n setIsFormDisabled(participationStartDate == null || isFuture(participationStartDate) || isPast(participationEndDate))\n\n setFormTitle(\"Partecipa\")\n setFormDescription(\"Compila il form per partecipare a questo gruppo d'acquisto\")\n setPreForm(\"\")\n setAfterForm(\"\")\n\n if (userInGroupData?.User?.mobile == null || userInGroupData?.User?.mobile == \"\") {\n form[\"mobile\"] = {\n type: \"string\",\n ...mobile,\n required: true,\n }\n }\n if (!userInGroupData?.User?.state) {\n form[\"state\"] = {\n ...state,\n required: true,\n }\n }\n\n setFormButton(\"Partecipa a questo gruppo d'acquisto\")\n\n break\n case 2:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 2\n\n if (rdbGroupData.GoodOrServiceVariants) {\n setIsFormVisible(reachedStep > 1)\n setIsFormDisabled(\n isFuture(choosingStartDate) || isPast(choosingEndDate) || (userInGroupData.confirmationDate && userInGroupData.definitelyNotInterestedInBuying == 0)\n )\n\n setPreForm(\n \n
\n {\n if (!isFormDisabled) setFormData({ ...formData, intention: \"acquisto\" })\n }}\n style={{ width: \"40%\", marginRight: \"2rem\" }}\n disabled={isFormDisabled}\n >\n \n Sono interessato/a all'acquisto\n \n {\n if (!isFormDisabled) setFormData({ ...formData, intention: \"informazioni\" })\n }}\n style={{ width: \"40%\" }}\n disabled={isFormDisabled}\n >\n \n Voglio solo Informazioni\n \n
\n
\n )\n setAfterForm(\"\")\n\n switch (formData.intention) {\n case \"acquisto\":\n setFormTitle(\"Acquisto\")\n setFormDescription(\"Facci sapere che cosa vuoi acquistare.\")\n setFormButton(\"Conferma la tua scelta\")\n\n // TODO: Manage multiple good/services bought in the same group\n // for now fixed at 1\n for (let rows = 0; rows < 1; rows++) {\n const rowName = `products_${rows}`\n let variantUserChoosingCustomFieldsDef = {}\n\n if (formData.values && formData.values[rowName]?.variant) {\n variantUserChoosingCustomFieldsDef = JSON.parse(\n rdbGroupData.GoodOrServiceVariants?.find((g) => g.id == formData.values[rowName].variant)\n .GoodOrService.GoodOrServiceType.userChoosingCustomFieldsDef.replace(/\\n/g, \"\")\n .replace(/\\r/g, \"\")\n .replace(/\\t/g, \"\")\n )\n }\n\n form[rowName] = {\n type: \"object\",\n properties: {\n variant: {\n title: \"Mi interessa\",\n type: \"string\",\n fieldType: \"select\",\n fieldProperties: {\n placeholder: \"Select...\",\n options: rdbGroupData.GoodsOrServices?.map((g) => {\n return g.Variants?.length > 0\n ? {\n label: g.GoodOrService.name,\n options: g.Variants?.map((v) => ({\n value: v.id,\n title: v.name,\n })),\n }\n : null\n }).filter((e) => e != null) || [{ value: \"0\", title: \"Errore, contatta l'amminiatratore del sito\" }],\n },\n required: true,\n errMessages: {\n required: \"E' necessario effettuare una scelta\",\n },\n },\n\n ...variantUserChoosingCustomFieldsDef,\n },\n }\n //console.log(\"Form: \", form)\n }\n\n // Output stringified JSON custom forms\n // console.log(JSON.stringify(custom_userChoosingAuto))\n\n break\n case \"informazioni\":\n setFormTitle(\"Solo informazioni\")\n setFormDescription(\n \"Continuerai a ricevere informazioni su questo gruppo, ma noi sapremo che non hai intenzione di acquistare. Potrai modificare la tua scelta in qualsiasi momento.\"\n )\n setFormButton(\"Conferma la tua scelta\")\n break\n default:\n setFormTitle(\"Intenzioni?\")\n setFormDescription(\"Facci sapere quali sono le tue intenzioni per questo gruppo d'acquisto\")\n form = null\n }\n\n if (userInGroupData.choosingDate != null) {\n const savedIntention = userInGroupData.notInterestInBuying ? \"informazioni\" : \"acquisto\"\n if (formData.intention == null) formData.intention = savedIntention\n\n if (savedIntention == formData.intention && savedIntention == \"informazioni\") {\n // Se intenzione = informazioni e non cambia non visualizzare il form\n form = null\n }\n setFormButton(\"Conferma la tua scelta\")\n }\n\n //console.log(formData)\n }\n break\n case 3:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 3\n if (rdbGroupData.GoodOrServiceVariants) {\n setIsFormVisible(reachedStep > 2 && isPast(confirmationStartDate))\n setIsFormDisabled(\n isFuture(confirmationStartDate) ||\n isPast(confirmationEndDate) ||\n (userInGroupData.confirmationDate && userInGroupData.definitelyNotInterestedInBuying == 0)\n )\n\n if (formData.intention == \"acquisto\") {\n setPreForm(\n \n
\n {\n if (!isFormDisabled) setFormData({ ...formData, confirm: \"si\" })\n }}\n style={{ width: \"40%\", marginRight: \"2rem\" }}\n disabled={isFormDisabled || (userInGroupData.confirmationDate && userInGroupData.definitelyNotInterestedInBuying == 0)}\n >\n \n Si\n \n {\n if (!isFormDisabled) setFormData({ ...formData, confirm: \"no\" })\n }}\n style={{ width: \"40%\" }}\n disabled={isFormDisabled || (userInGroupData.confirmationDate && userInGroupData.definitelyNotInterestedInBuying == 0)}\n >\n \n No\n \n
\n
\n )\n setAfterForm(\"\")\n\n switch (formData.confirm) {\n case \"si\":\n setFormTitle(\"Conferma\")\n setFormDescription(\"Conferma la tua intenzione di acquisto.\")\n setFormButton(\"Conferma la tua intenzione di acquisto\")\n\n // Check if the user is subscribed, if not do not let finish step 3\n if (!subscribedUntil || isPast(parseISO(subscribedUntil))) {\n form = null\n setFormTitle(\"Associati\")\n setFormDescription(\"Per confermare la tua intenzione di acquisto devi prima associarti ad Ecoverso\")\n setAfterForm(\n
\n

\n Per proseguire è necessario essere associati ad Ecoverso. Procedi cliccando sul bottone qua sotto e ritorna a questo gruppo per\n confermare la tua scelta una volta associato/a.\n

\n \n Clicca qui per associarti\n \n
\n )\n } else {\n // TODO: Manage multiple good/services bought in the same group\n // for now fixed at 1\n for (let rows = 0; rows < 1; rows++) {\n const rowName = `products_${rows}`\n let variantUserConfirmationCustomFieldsDef = {}\n\n if (formData.values && formData.values[rowName]?.variant) {\n variantUserConfirmationCustomFieldsDef = JSON.parse(\n rdbGroupData.GoodOrServiceVariants?.find((g) => g.id == formData.values[rowName].variant)\n .GoodOrService.GoodOrServiceType.userConfirmationCustomFieldsDef.replace(/\\n/g, \"\")\n .replace(/\\r/g, \"\")\n .replace(/\\t/g, \"\")\n )\n }\n\n form[rowName] = {\n type: \"object\",\n properties: {\n variant: {\n title: \"La tua scelta\",\n type: \"string\",\n fieldType: \"select\",\n fieldProperties: {\n placeholder: \"Select...\",\n options: rdbGroupData.GoodsOrServices?.map((g) => {\n return g.Variants?.length > 0\n ? {\n label: g.GoodOrService.name,\n options: g.Variants?.map((v) => ({\n value: v.id,\n title: v.name,\n })),\n }\n : null\n }).filter((e) => e != null) || [{ value: \"0\", title: \"Errore, contatta l'amminiatratore del sito\" }],\n },\n disabled: true,\n },\n reseller: {\n title: \"Da quale fornitore\",\n type: \"string\",\n fieldType: \"select\",\n fieldProperties: {\n placeholder: \"Select...\",\n options: rdbGroupData.Resellers?.map((g) => ({\n title: g.Organization.name,\n value: g.Organization.id,\n })) || [{ value: \"0\", title: \"Errore, contatta l'amminiatratore del sito\" }],\n },\n required: true,\n errMessages: {\n required: \"E' necessario selezionare un fornitore\",\n },\n },\n ...variantUserConfirmationCustomFieldsDef,\n //...custom_userConfirmationAuto,\n },\n }\n }\n }\n\n // Output stringified JSON custom forms\n //console.log(JSON.stringify(custom_userConfirmationAuto))\n\n break\n case \"no\":\n setFormTitle(\"Grazie\")\n setFormDescription(\n \"Ti ricordiamo che hai ancora \" +\n -differenceInCalendarDays(new Date(), choosingEndDate) +\n \" giorni per cambiare idea, oppure potrai registrati nuovamente in futuro.\"\n )\n setFormButton(\"Conferma la tua scelta\")\n break\n default:\n setFormTitle(\"Conferma\")\n setFormDescription(\"Confermi la tua intenzione di acquisto tramite Ecoverso?\")\n form = null\n }\n\n if (userInGroupData.confirmationDate != null) {\n const savedConfirm = userInGroupData.definitelyNotInterestedInBuying ? \"no\" : \"si\"\n if (formData.confirm == null) formData.confirm = savedConfirm\n\n if (savedConfirm == formData.confirm && savedConfirm == \"no\") {\n form = null\n }\n setFormButton(\"Conferma la tua scelta\")\n }\n } else {\n setFormTitle(\"Informazioni\")\n setFormDescription(\n \"Nello step 2 hai scelto di ricevere solo informazioni. Se hai cambiato idea e desideri acquistare, torna allo step 2 e modifica le tue intenzioni.\"\n )\n setPreForm(\"\")\n setFormButton(\"\")\n form = null\n }\n }\n break\n case 4:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step UNICO\n if (rdbGroupData.GoodOrServiceVariants) {\n setIsFormVisible(isPast(confirmationStartDate))\n setIsFormDisabled(\n isFuture(confirmationStartDate) ||\n isPast(confirmationEndDate) ||\n (userInGroupData.confirmationDate && userInGroupData.definitelyNotInterestedInBuying == 0)\n )\n\n setPreForm(\n \n
\n {\n if (!isFormDisabled) setFormData({ ...formData, confirm: \"si\" })\n }}\n style={{ width: \"40%\", marginRight: \"2rem\" }}\n disabled={isFormDisabled || (userInGroupData.confirmationDate && userInGroupData.definitelyNotInterestedInBuying == 0)}\n >\n \n Si\n \n {\n if (!isFormDisabled) setFormData({ ...formData, confirm: \"no\" })\n }}\n style={{ width: \"40%\" }}\n disabled={isFormDisabled || (userInGroupData.confirmationDate && userInGroupData.definitelyNotInterestedInBuying == 0)}\n >\n \n No\n \n
\n
\n )\n setAfterForm(\"\")\n\n switch (formData.confirm) {\n case \"si\":\n setFormTitle(\"Conferma\")\n setFormDescription(\"Conferma la tua intenzione di acquisto.\")\n setFormButton(\"Conferma la tua intenzione di acquisto\")\n\n // Check if the user is subscribed, if not do not let finish step 3\n if (!subscribedUntil || isPast(parseISO(subscribedUntil))) {\n form = null\n setFormTitle(\"Associati\")\n setFormDescription(\"Per confermare la tua intenzione di acquisto devi prima associarti ad Ecoverso\")\n setAfterForm(\n
\n

\n Per proseguire è necessario essere associati ad Ecoverso. Procedi cliccando sul bottone qua sotto e ritorna a questo gruppo per confermare\n la tua scelta una volta associato/a.\n

\n \n Clicca qui per associarti\n \n
\n )\n } else {\n if (userInGroupData?.User?.mobile == null || userInGroupData?.User?.mobile == \"\") {\n form[\"mobile\"] = {\n type: \"string\",\n ...mobile,\n required: true,\n }\n }\n if (!userInGroupData?.User?.state) {\n form[\"state\"] = {\n ...state,\n required: true,\n }\n }\n\n // TODO: Manage multiple good/services bought in the same group\n // for now fixed at 1\n for (let rows = 0; rows < 1; rows++) {\n const rowName = `products_${rows}`\n let variantUserConfirmationCustomFieldsDef = {}\n\n if (formData.values && formData.values[rowName]?.variant) {\n variantUserConfirmationCustomFieldsDef = JSON.parse(\n rdbGroupData.GoodOrServiceVariants?.find((g) => g.id == formData.values[rowName].variant)\n .GoodOrService.GoodOrServiceType.userConfirmationCustomFieldsDef.replace(/\\n/g, \"\")\n .replace(/\\r/g, \"\")\n .replace(/\\t/g, \"\")\n )\n }\n\n form[rowName] = {\n type: \"object\",\n properties: {\n variant: {\n title: \"La tua scelta\",\n type: \"string\",\n fieldType: \"select\",\n fieldProperties: {\n placeholder: \"Select...\",\n options: rdbGroupData.GoodsOrServices?.map((g) => {\n return g.Variants?.length > 0\n ? {\n label: g.GoodOrService.name,\n options: g.Variants?.map((v) => ({\n value: v.id,\n title: v.name,\n })),\n }\n : null\n }).filter((e) => e != null) || [{ value: \"0\", title: \"Errore, contatta l'amminiatratore del sito\" }],\n },\n required: true,\n errMessages: {\n required: \"E' necessario effettuare una scelta\",\n },\n },\n reseller: {\n title: \"Da quale fornitore\",\n type: \"string\",\n fieldType: \"select\",\n fieldProperties: {\n placeholder: \"Select...\",\n options: rdbGroupData.Resellers?.map((g) => ({\n title: g.Organization.name,\n value: g.Organization.id,\n })) || [{ value: \"0\", title: \"Errore, contatta l'amminiatratore del sito\" }],\n },\n required: true,\n errMessages: {\n required: \"E' necessario selezionare un fornitore\",\n },\n },\n ...variantUserConfirmationCustomFieldsDef,\n //...custom_userConfirmationAuto,\n },\n }\n }\n }\n\n // Output stringified JSON custom forms\n //console.log(JSON.stringify(custom_userConfirmationAuto))\n\n break\n case \"no\":\n setFormTitle(\"Grazie\")\n setFormDescription(\n \"Ti ricordiamo che hai ancora \" +\n -differenceInCalendarDays(new Date(), choosingEndDate) +\n \" giorni per cambiare idea, oppure potrai registrati nuovamente in futuro.\"\n )\n setFormButton(\"Conferma la tua scelta\")\n break\n default:\n setFormTitle(\"Conferma\")\n setFormDescription(\"Confermi la tua intenzione di acquisto tramite Ecoverso?\")\n form = null\n }\n\n if (userInGroupData.confirmationDate != null) {\n const savedConfirm = userInGroupData.definitelyNotInterestedInBuying ? \"no\" : \"si\"\n if (formData.confirm == null) formData.confirm = savedConfirm\n\n if (savedConfirm == formData.confirm && savedConfirm == \"no\") {\n form = null\n }\n setFormButton(\"Conferma la tua scelta\")\n }\n }\n break\n }\n\n if (form != null) {\n form[\"confirmWhatRead\"] = {\n type: \"boolean\",\n title: \"Ho letto e compreso le istruzioni di questa pagina\",\n className: \"mb-none\",\n required: true,\n errMessages: {\n required: \"Per proseguire è necessario leggere e confermare di aver compreso le istruzioni di questa pagina\",\n },\n }\n }\n\n //console.log(form, localCurrentStep, rdbGroupData)\n setForm(form)\n }, [localCurrentStep, userInGroupData, formData, rdbGroupData])\n\n //---------------------------------------------------------------------------------------------------------------------------------------------------------\n //---------------------------------------------------------------------------------------------------------------------------------------------------------\n // Submit handling\n\n const onSubmit = async (values: any, setSubmitting) => {\n setIsLoading(true)\n switch (localCurrentStep) {\n case 1:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 1\n updateUserInGroup({\n variables: { updateUser_in_buying_groupInput: { id: userInGroupData.id, participationDate: \"set\" } },\n })\n // Check if we also need to update mobile or stte\n if (values.mobile || values.state) {\n let updateUserValues = {}\n if (values.mobile) updateUserValues[\"mobile\"] = values.mobile\n if (values.state) updateUserValues[\"state\"] = values.state\n await updateUserData({ variables: { ...updateUserValues, id: userId } })\n\n // Send event to GTM\n window?.dataLayer?.push({\n event: \"group-step-completed\",\n step: \"1\",\n groupUID: rdbGroupData.uidCMS,\n groupName: rdbGroupData.name,\n groupParticipationScope: \"informazioni\",\n groupDeclination: rdbGroupData.declination,\n })\n }\n\n break\n case 2:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 2\n\n let foundChosedVariantIds = []\n\n if (formData.intention == \"acquisto\") {\n // TODO: Manage multiple chosed variants bought in the same group\n\n // for now fixed at 1 -\n for (let rows = 0; rows < 1; rows++) {\n const rowName = `products_${rows}`\n\n // Define chosedVariant from form values\n const chosedVariant = {\n idBuyingGroup: rdbGroupData.id,\n idUser: userId,\n idVariant: values[rowName].variant,\n quantity: 1,\n dateChosed: \"set\",\n userChoosingCustomValues: JSON.stringify(_.omit(values[rowName], [\"variant\"])).replace(/\\\\n/g, \"\\\\\\\\n\"),\n dateConfirmed: null,\n dateCanceled: null,\n cancellationPhase: null,\n }\n console.log(\"chosedVariant: \", chosedVariant)\n\n // Check if chosedVariant already exists (precedently saved)\n let foundChosedVariantId = null\n if (Array.isArray(userInGroupData.ChosedVariants)) {\n userInGroupData.ChosedVariants.forEach((c) => {\n if (c.idBuyingGroup == chosedVariant.idBuyingGroup && c.idUser == chosedVariant.idUser && c.idVariant == chosedVariant.idVariant) {\n foundChosedVariantId = c.id\n foundChosedVariantIds.push(c.id)\n }\n })\n }\n\n // If exist update else create\n if (foundChosedVariantId) {\n await updateUserChosedVariant({ variables: { updateChosed_variantInput: { ...chosedVariant, id: foundChosedVariantId } } })\n } else {\n await createUserChosedVariant({ variables: { createChosed_variantInput: { ...chosedVariant } } })\n }\n }\n }\n\n // Now one of 2:\n // + cancel eventual old chosedvariants that are no longer present in foundChosedVariantId[]\n // + Vogliamo solo informazioni, verifica se ci sono chosed variants e cancellale (foundChosedVariantId is empty)\n if (Array.isArray(userInGroupData.ChosedVariants)) {\n for (let i = 0; i < userInGroupData.ChosedVariants.length; i++) {\n const c = userInGroupData.ChosedVariants[i]\n if (!foundChosedVariantIds.includes(c.id) && !c.dateCanceled) {\n await updateUserChosedVariant({ variables: { updateChosed_variantInput: { id: c.id, dateCanceled: \"set\", cancellationPhase: \"choosing\" } } })\n }\n }\n }\n\n // Save userInGroup Data\n await updateUserInGroup({\n variables: {\n updateUser_in_buying_groupInput: {\n id: userInGroupData.id,\n choosingDate: \"set\",\n notInterestInBuying: formData.intention == \"informazioni\" ? 1 : 0,\n confirmationDate: null,\n definitelyNotInterestedInBuying: null,\n },\n },\n })\n\n // Send event to GTM\n window?.dataLayer?.push({\n event: \"group-step-completed\",\n step: \"2\",\n groupUID: rdbGroupData.uidCMS,\n groupName: rdbGroupData.name,\n groupParticipationScope: formData.intention,\n groupDeclination: rdbGroupData.declination,\n })\n\n break\n case 3:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step 3\n\n if (formData.confirm == \"si\") {\n // TODO: Manage multiple chosed variants bought in the same group\n\n // for now fixed at 1 -\n for (let rows = 0; rows < 1; rows++) {\n const rowName = `products_${rows}`\n\n // Define chosedVariant from form values\n const confirmedVariant = {\n idBuyingGroup: rdbGroupData.id,\n idUser: userId,\n idVariant: values[rowName].variant,\n idReseller: values[rowName].reseller,\n dateConfirmed: \"set\",\n userConfirmationCustomValues: JSON.stringify(_.omit(values[rowName], [\"variant\", \"reseller\"])).replace(/\\\\n/g, \"\\\\\\\\n\"),\n dateCanceled: null,\n cancellationPhase: null,\n }\n console.log(\"chosedVariant: \", confirmedVariant)\n\n // Check if chosedVariant already exists (precedently saved)\n // (it should always exist because we are at step 3)\n let foundChosedVariantId = null\n if (Array.isArray(userInGroupData.ChosedVariants)) {\n userInGroupData.ChosedVariants.forEach((c) => {\n if (c.idBuyingGroup == confirmedVariant.idBuyingGroup && c.idUser == confirmedVariant.idUser && c.idVariant == confirmedVariant.idVariant) {\n foundChosedVariantId = c.id\n }\n })\n }\n\n // If exist update else create\n if (foundChosedVariantId) {\n await updateUserChosedVariant({ variables: { updateChosed_variantInput: { ...confirmedVariant, id: foundChosedVariantId } } })\n } else {\n console.log(\"ChosedVariant not found while confirming, this is a problem!\")\n //await createUserChosedVariant({ variables: { createChosed_variantInput: { ...confirmedVariant } } })\n }\n }\n } else {\n // Non confermiamo l'acquisto, verifica se ci sono chosed variants ed cancellale\n if (Array.isArray(userInGroupData.ChosedVariants)) {\n for (let i = 0; i < userInGroupData.ChosedVariants.length; i++) {\n const c = userInGroupData.ChosedVariants[i]\n if (!c.dateCanceled) {\n await updateUserChosedVariant({\n variables: { updateChosed_variantInput: { id: c.id, dateCanceled: \"set\", cancellationPhase: \"confirmation\" } },\n })\n }\n }\n }\n }\n\n // Save userInGroup Data\n await updateUserInGroup({\n variables: {\n updateUser_in_buying_groupInput: {\n id: userInGroupData.id,\n confirmationDate: \"set\",\n definitelyNotInterestedInBuying: formData.confirm == \"no\" ? 1 : 0,\n },\n },\n })\n\n // Send event to GTM\n window?.dataLayer?.push({\n event: \"group-step-completed\",\n step: \"3\",\n groupUID: rdbGroupData.uidCMS,\n groupName: rdbGroupData.name,\n groupParticipationScope: formData.confirm == \"no\" ? \"informazioni\" : \"acquisto\",\n groupDeclination: rdbGroupData.declination,\n })\n\n break\n case 4:\n //---------------------------------------------------------------------------------------------------------------------------------------------------\n // Step UNICO\n\n if (formData.confirm == \"si\") {\n // TODO: Manage multiple chosed variants bought in the same group\n\n // for now fixed at 1 -\n for (let rows = 0; rows < 1; rows++) {\n const rowName = `products_${rows}`\n\n // Define chosedVariant from form values\n const confirmedVariant = {\n idBuyingGroup: rdbGroupData.id,\n idUser: userId,\n idVariant: values[rowName].variant,\n idReseller: values[rowName].reseller,\n dateConfirmed: \"set\",\n userConfirmationCustomValues: JSON.stringify(_.omit(values[rowName], [\"variant\", \"reseller\"])).replace(/\\\\n/g, \"\\\\\\\\n\"),\n dateCanceled: null,\n cancellationPhase: null,\n }\n console.log(\"chosedVariant: \", confirmedVariant)\n\n // Check if chosedVariant already exists (precedently saved)\n // (it should always exist because we are at step 3)\n let foundChosedVariantId = null\n if (Array.isArray(userInGroupData.ChosedVariants)) {\n userInGroupData.ChosedVariants.forEach((c) => {\n if (c.idBuyingGroup == confirmedVariant.idBuyingGroup && c.idUser == confirmedVariant.idUser && c.idVariant == confirmedVariant.idVariant) {\n foundChosedVariantId = c.id\n }\n })\n }\n\n // If exist update else create\n if (foundChosedVariantId) {\n await updateUserChosedVariant({ variables: { updateChosed_variantInput: { ...confirmedVariant, id: foundChosedVariantId } } })\n } else {\n await createUserChosedVariant({ variables: { createChosed_variantInput: { ...confirmedVariant } } })\n }\n }\n } else {\n // Non confermiamo l'acquisto, verifica se ci sono chosed variants ed cancellale\n if (Array.isArray(userInGroupData.ChosedVariants)) {\n for (let i = 0; i < userInGroupData.ChosedVariants.length; i++) {\n const c = userInGroupData.ChosedVariants[i]\n if (!c.dateCanceled) {\n await updateUserChosedVariant({\n variables: { updateChosed_variantInput: { id: c.id, dateCanceled: \"set\", cancellationPhase: \"confirmation\" } },\n })\n }\n }\n }\n }\n\n // Check if we also need to update mobile or stte\n if (values.mobile || values.state) {\n let updateUserValues = {}\n if (values.mobile) updateUserValues[\"mobile\"] = values.mobile\n if (values.state) updateUserValues[\"state\"] = values.state\n await updateUserData({ variables: { ...updateUserValues, id: userId } })\n }\n\n // Save userInGroup Data\n await updateUserInGroup({\n variables: {\n updateUser_in_buying_groupInput: {\n id: userInGroupData.id,\n participationDate: \"set\",\n choosingDate: \"set\",\n notInterestInBuying: 0,\n confirmationDate: \"set\",\n definitelyNotInterestedInBuying: formData.confirm == \"no\" ? 1 : 0,\n },\n },\n })\n\n // Send event to GTM\n window?.dataLayer?.push({\n event: \"group-step-completed\",\n step: \"3\",\n groupUID: rdbGroupData.uidCMS,\n groupName: rdbGroupData.name,\n groupParticipationScope: formData.confirm == \"no\" ? \"informazioni\" : \"acquisto\",\n groupDeclination: rdbGroupData.declination,\n })\n\n break\n }\n setSubmitting(false)\n setIsLoading(false)\n }\n\n const onChange = (values) => {\n let newData = { ...formData, values }\n setFormData(newData)\n //console.log(newData)\n }\n\n //---------------------------------------------------------------------------------------------------------------------------------------------------------\n //---------------------------------------------------------------------------------------------------------------------------------------------------------\n // Rendering\n\n return (\n \n {reachedStep != currentStep ? (\n {}}\n setCurrentStep={(step) => {\n scrollToTop()\n setTimeout(() => setCurrentStep(step), 300)\n }}\n scrollToForm={() => {}}\n />\n ) : null}\n \n {isFormVisible ? (\n
\n
\n
\n

{formTitle}

\n

{formDescription}

\n
\n
\n
\n {preForm}\n {form != null ? (\n \n ) : null}\n {afterForm}\n
\n
\n
\n ) : null}\n
\n )\n}\n\nexport default Forms\n","import React, { useContext, useEffect, useState } from \"react\"\nimport { useSelector, useDispatch } from \"react-redux\"\nimport * as actions from \"../store/actions\"\nimport { graphql } from \"gatsby\"\nimport gql from \"graphql-tag\"\n\nimport { getAppSyncClientContext } from \"../ApolloWrapper\"\nimport { useMutation, useQuery } from \"@apollo/client\"\n\nimport GridLayout from \"../Layout/GridLayout\"\nimport Img from \"gatsby-image/withIEPolyfill\"\nimport { FormatDate, Link, useI18next } from \"../i18n\"\nimport siteMap from \"../sitemap\"\n\nimport { Icon, Title, Breadcrumbs, Image, ImageData } from \"../Layout/Components\"\nimport { Popover } from \"antd\"\nimport { DynamicRow, RowData } from \"../rows/DynamicRow\"\nimport Steps, { StepProps } from \"../Layout/Components/Steps\"\n\nimport { Seo, StructuredData } from \"../seo\"\nimport { Car, Product, WithContext } from \"schema-dts\"\nimport { faGameConsoleHandheld } from \"@fortawesome/pro-duotone-svg-icons\"\nimport { buying_group, user_in_buying_group } from \"../API\"\nimport { differenceInCalendarDays, isFuture, isPast, parseISO } from \"date-fns\"\nimport { getArgumentValues } from \"graphql/execution/values\"\n\nimport GroupSteps from \"./groupElements/GroupSteps\"\nimport InContentTopBar from \"./groupElements/InContentTopBar\"\nimport { createUserInBuyingGroup, updateUserInBuyingGroup } from \"../graphql/mutations\"\nimport { GET_PERSONAL_DETAILS, UPDATE_PERSONAL_DETAILS, getBuyingGroup, getBuyingGroupAsParticipant, searchUserInBuyingGroups } from \"../graphql.my/queries\"\n\nimport { firstName, email, readPrivacy, mobile, state } from \"../forms/fields/user\"\nimport FormGenerator from \"../Layout/Forms/FormGenerator\"\nimport WPComments from \"../rows/WPComments\"\nimport Forms from \"./groupElements/Forms\"\nimport ManageGroup from \"../User/Profile/Components/ManageGroup\"\n\n//----------------------------------------------------------------------------------------------------------------\n\nexport type buyingGroupData = {\n id: string\n idOrganization: string\n name: string\n description: string\n uidCMS: string\n pubblicationStartDate: string\n registrationStartDate: string\n participationStartDate: string\n choosingStartDate: string\n registrationEndDate: string\n confirmationStartDate: string\n resellerFlowStartDate: string\n pubblicationEndDate: string\n participationEndDate: string\n choosingEndDate: string\n confirmationEndDate: string\n resellerFlowEndDate: string\n maxChoosableVariants: string\n uniteChooseAndConfirm: string\n declination: string\n isOnlyUpselling: string\n GoodsOrServices: [\n {\n GoodOrService: {\n name: string\n slug: string\n GoodOrServiceType: {\n name: string\n slug: string\n description: string\n userChoosingCustomFieldsDef: string\n userConfirmationCustomFieldsDef: string\n }\n }\n Variants: [\n {\n id: string\n code: string\n name: string\n description: string\n maxQuantity: string\n discountAmountEach: string\n discountPercent: string\n }\n ]\n }\n ]\n GoodOrServiceVariants: [\n {\n id: string\n code: string\n name: string\n description: string\n maxQuantity: string\n discountAmountEach: string\n discountPercent: string\n GoodOrService: {\n name: string\n slug: string\n GoodOrServiceType: {\n name: string\n slug: string\n description: string\n userChoosingCustomFieldsDef: string\n userConfirmationCustomFieldsDef: string\n }\n }\n }\n ]\n Resellers: [\n {\n Organization: {\n id: string\n name: string\n state: string\n city: string\n }\n }\n ]\n}\n\n//----------------------------------------------------------------------------------------------------------------\n\n//todo: ragionare su possibile structuredData per i gruppi di acquisto (vedi wpCar.tsx + https://developers.google.com/search/docs/data-types/article)\n\nexport default (props) => {\n const { t } = useI18next()\n const dispatch = useDispatch()\n const wpGroup = props.data.wordPress.buyingGroup\n\n //console.log(\"Data: \", props.data)\n //console.log(\"Props: \", props)\n //console.log(\"Articles: \", pressArticles)\n\n const isLoggedIn = useSelector((state) => state.auth.isLoggedIn)\n const userId = useSelector((state) => state.auth.payload?.userData?.userId)\n const userFirstName = useSelector((state) => state.auth.payload?.userData?.firstName)\n const isAdmin = useSelector((state) => state.auth.payload.role?.includes(\"Admin\") || state.auth.payload.role?.includes(\"SuperAdmin\"))\n\n const [currentStep, setCurrentStep] = useState(0)\n const [reachedStep, setReachedStep] = useState(0)\n const [rdbGroupData, setRdbGroupData] = useState(props.data.appsync.getBuying_group as buyingGroupData)\n const [userInGroupData, setUserInGroupData] = useState(null as user_in_buying_group | null)\n const [isLoading, setIsLoading] = useState(false)\n const [isError, setIsError] = useState(null)\n const [isFormLoading, setIsFormLoading] = useState(false)\n\n const rowsPerStep = [\n Array.isArray(wpGroup.details.rowsStep0) ? wpGroup.details.rowsStep0 : [],\n Array.isArray(wpGroup.details.rowsStep1) ? wpGroup.details.rowsStep1 : [],\n Array.isArray(wpGroup.details.rowsStep2) ? wpGroup.details.rowsStep2 : [],\n Array.isArray(wpGroup.details.rowsStep3) ? wpGroup.details.rowsStep3 : [],\n ]\n\n const scrollToTop = () => {\n var element = document.querySelector(\".hero__group__steps\")\n if (element) element.scrollIntoView({ behavior: \"smooth\", block: \"center\" })\n }\n\n let choosingStartDate = rdbGroupData.choosingStartDate != null ? parseISO(rdbGroupData.choosingStartDate) : null\n let confirmationStartDate = rdbGroupData.confirmationStartDate != null ? parseISO(rdbGroupData.confirmationStartDate) : null\n\n const setCurrentStepWrapper = (step) => {\n const originalStep = currentStep\n if (step > 1 && isFuture(choosingStartDate)) step = 1\n if (step > 2 && isFuture(confirmationStartDate)) step = 2\n if (rdbGroupData.uniteChooseAndConfirm && step > 1) step = 1\n\n // If we change step generate a virtual page view\n if (step != originalStep) {\n // Send event to GTM\n window?.dataLayer?.push({ event: \"simulatedPageView\", urlSuffix: `step-${step}` })\n }\n\n setCurrentStep(step)\n }\n\n // -------------------------------------------------------------------------------------------------------------------\n // --- QUERIES -------------------------------------------------------------------------------------------------------\n\n const getAppsyncClient = useContext(getAppSyncClientContext)\n\n // --- Group ---------------------------------------------------------------------------------------------------------\n\n // Fetch Updated RDB Group Data\n const {\n loading: rdbGroupLoading,\n error: rdbGroupError,\n data: rdbGroupDataFetch,\n } = useQuery(gql(userInGroupData ? getBuyingGroupAsParticipant : getBuyingGroup), {\n variables: { id: props.pageContext.rdbId },\n client: getAppsyncClient(isLoggedIn),\n // fetchPolicy: \"no-cache\",\n })\n\n // Handle Updated RDB Group Data\n useEffect(() => {\n // Update comments with the ones from wordpress ;-)\n if (!rdbGroupLoading && !rdbGroupError) {\n setRdbGroupData(rdbGroupDataFetch.getBuying_group)\n //console.log(\"RDB Group data: \", rdbGroupDataFetch.getBuying_group)\n }\n }, [rdbGroupDataFetch, rdbGroupError, rdbGroupLoading])\n\n // --- User in Buying Group ------------------------------------------------------------------------------------------\n\n // Fetch Updated User In Group Group Data\n const {\n loading: userInGroupLoading,\n error: userInGroupError,\n data: userInGroupDataFetch,\n refetch: userInGroupDataRefetch,\n } = useQuery(gql(searchUserInBuyingGroups), {\n variables: { user_in_buying_group: { idBuyingGroup: props.pageContext.rdbId, idUser: userId } },\n skip: !isLoggedIn || !userId,\n fetchPolicy: \"no-cache\",\n })\n\n useEffect(() => {\n if (!userInGroupLoading && !userInGroupError && userInGroupDataFetch != null) {\n if (userInGroupDataFetch.searchUser_in_buying_groups != null) {\n setUserInGroupData(userInGroupDataFetch.searchUser_in_buying_groups[0])\n const userData = userInGroupDataFetch.searchUser_in_buying_groups[0]\n // User is in grup, determine currently reached which step\n //console.log(\"User in group: \", userInGroupDataFetch.searchUser_in_buying_groups[0])\n setCurrentStepWrapper(userData.choosingDate ? 3 : userData.participationDate ? 2 : 1)\n setReachedStep(userData.confirmationDate ? 4 : userData.choosingDate ? 3 : userData.participationDate ? 2 : 1)\n } else {\n setUserInGroupData(null)\n //console.log(\"User not in group. \", userInGroupDataFetch)\n }\n }\n //console.log(\"User in group: \", userInGroupDataFetch, userInGroupLoading, userInGroupError)\n }, [userInGroupDataFetch, userInGroupError, userInGroupLoading])\n\n // -------------------------------------------------------------------------------------------------------------------\n // --- MUTATIONS -----------------------------------------------------------------------------------------------------\n\n // -------------------------------------------------------------------------------------------------------------------\n // Registration\n\n const [registerToGroup, { loading: registrationLoading }] = useMutation(gql(createUserInBuyingGroup), {\n onCompleted: () => {\n userInGroupDataRefetch()\n dispatch(\n actions.notificationAdd({\n message: \"Registrazione avvenuta con successo\",\n variant: \"SmileIcon\",\n duration: 30,\n })\n )\n scrollToTop()\n },\n onError: (error) => {\n dispatch(actions.notificationAdd({ message: t(\"Registration Error\"), variant: \"DangerIcon\" }))\n console.log(\"Registration Error\", error)\n return null\n },\n })\n\n const onRegister = async () => {\n setIsLoading(true)\n await registerToGroup({\n variables: { createUser_in_buying_groupInput: { idBuyingGroup: props.pageContext.rdbId, idUser: userId } },\n })\n\n // Send event to GTM\n window?.dataLayer?.push({\n event: \"group-step-completed\",\n step: \"0\",\n groupUID: rdbGroupData.uidCMS,\n groupName: rdbGroupData.name,\n groupParticipationScope: \"informazioni\",\n groupDeclination: rdbGroupData.declination,\n })\n }\n\n // -------------------------------------------------------------------------------------------------------------------\n // Merge all loadings\n useEffect(() => {\n setIsLoading(rdbGroupLoading || userInGroupLoading || registrationLoading || isFormLoading)\n }, [rdbGroupLoading, userInGroupLoading, registrationLoading, isFormLoading])\n\n // Merge all errors\n useEffect(() => {\n if (rdbGroupError != null || userInGroupError != null) {\n setIsError(true)\n dispatch(actions.notificationAdd({ message: t(\"API Error\"), variant: \"DangerIcon\" }))\n console.log(\"Error (Group): \", rdbGroupError)\n console.log(\"Error (User In Group): \", userInGroupError)\n }\n }, [rdbGroupError, userInGroupError])\n\n // -------------------------------------------------------------------------------------------------------------------\n // --- Render the page -----------------------------------------------------------------------------------------------\n return (\n \n \n \n\n
\n
\n \n
\n
\n {isAdmin ? (\n
\n \n Gestisci gruppo\n \n
\n ) : null}\n
\n
\n

\n
\n
\n {!isLoading ? (\n \n ) : (\n \n )}\n
\n
\n\n
\n
\n {!isLoading ? (\n {\n var element = document.querySelector(\"#form\")\n if (element) element.scrollIntoView({ behavior: \"smooth\", block: \"center\" })\n }}\n />\n ) : null}\n\n {rowsPerStep[currentStep].map((row, i) => (\n \n ))}\n\n {currentStep >= 1 ? (\n \n ) : null}\n\n {currentStep >= 1 ? (\n \n
\n
\n
\n
\n

Bacheca

\n
\n
\n

\n Di seguito trovi la bacheca di questo{\" \"}\n {{ Servizio: \"Servizio Plus\", Auto: \"Gruppo d'Acquisto\", Convenzione: \"Convenzione\" }[rdbGroupData.declination]}, attraverso la quale\n puoi comunicare sia con noi coordinatori che con gli altri partecipanti.\n

\n

Scrivi qui le tue domande, verificando che non abbiano già trovato risposta nei commenti precedenti.

\n

Ti risponderemo appena possibile.

\n
\n
\n
\n
\n \n
\n ) : null}\n
\n
\n\n {/* {currentStep == 0 ? (\n \n
\n
\n {rowsPerStep[1].map((row, i) => (\n \n ))}\n
\n
\n
\n
\n {rowsPerStep[2].map((row, i) => (\n \n ))}\n
\n
\n
\n
\n {rowsPerStep[3].map((row, i) => (\n \n ))}\n
\n
{\" \"}\n
\n ) : null} */}\n \n )\n}\n\n// ------------------------------------------------------------------------------------------------------------------\n// ------------------------------------------------------------------------------------------------------------------\n\nexport const query = graphql`\n query ($rdbId: String!, $id: ID!, $tags: [String!], $buyingGroupsWpIds: [ID!], $languageCode: Wordpress_LanguageCodeFilterEnum!, $relatedPostsLimit: Int) {\n appsync {\n getBuying_group(id: $rdbId) {\n id\n pubblicationStartDate\n pubblicationEndDate\n registrationStartDate\n registrationEndDate\n participationStartDate\n participationEndDate\n choosingStartDate\n choosingEndDate\n confirmationStartDate\n confirmationEndDate\n resellerFlowStartDate\n resellerFlowEndDate\n maxChoosableVariants\n isOnlyUpselling\n uniteChooseAndConfirm\n declination\n uidCMS\n GoodsOrServices {\n GoodOrService {\n name\n slug\n }\n }\n }\n ...dbBuyingGroupsData\n }\n wordPress {\n buyingGroup(id: $id) {\n id\n databaseId\n slug\n title\n language {\n slug\n }\n seo {\n title\n metaDesc\n }\n translations {\n slug\n language {\n slug\n }\n }\n tags {\n nodes {\n slug\n name\n }\n }\n brands {\n nodes {\n name\n slug\n details {\n logo {\n ...imageData\n }\n }\n }\n }\n details {\n uid\n coloring\n imageHero {\n ...imageData\n }\n rowsStep0 {\n ...buyingGroupStep0Rows\n }\n rowsStep1 {\n ...buyingGroupStep1Rows\n }\n rowsStep2 {\n ...buyingGroupStep2Rows\n }\n rowsStep3 {\n ...buyingGroupStep3Rows\n }\n }\n commentCount\n commentStatus\n ...buyingGroupComments\n }\n ...pageAccessoryData\n }\n }\n`\n"],"sourceRoot":""}