import {Action, SelectActionPopupWindowProps} from "../SelectActionPopupWindow"; import {atom, createStore, useAtom, useAtomValue, useSetAtom} from "jotai"; import {ComponentsMeta, getComponentMeta, getComponentMetaData} from "../ComponentsMeta"; import {offers} from "../../conditionsOrFilters/CardCreator"; import { ComponentRuntimeDataWithParentType, getDefaultRuntimeComponentDataWithParentType } from "../components"; import {closeSelectActionsPopupWindow, UseScreenNavigationActions} from "../hooks"; import React, {useState} from "react"; import {Note} from "../cards"; import {ContentWithSidebars} from "../../ContentWithSidebars"; import {SelectedFiltersSidebar} from "../../SelectedFiltersSidebar"; import {fieldsContentWidth} from "../../TestablesPopupWindow"; import {Fields} from "../../Fields"; import {cloneDeep, set} from "lodash"; import {produce} from "immer"; import {NodesStore, OfferData, useNodesStore} from "../store"; import {generate} from "shortid"; import {withDecodedEntities} from "../../helpers"; import { atomsStore, PopupWindowState, SelectActionContext, SelectActionContextOffers, SelectActionPopupWindowStateAtom } from "../atoms"; import {Tree} from "../Tree"; import {Testables} from "../testables"; import { __ } from "../../globals"; import {StateBranchNode} from "../StateBranchNode"; import {MemoryBranchNode} from "../MemoryBranchNode"; import {generateIdForType} from "../NodeHelpers"; import {Offers} from "../Offers"; import {Grove} from "../Grove"; import {GroveActions} from "../GroveActions"; const SelectedOfferAtom = atom | null>(null) const SelectedOffersAtom = atom([]) atomsStore.set(SelectedOfferAtom, null) atomsStore.set(SelectedOffersAtom, []) const FieldsToRender = ({notes, setNotes}: { notes: Note[], setNotes: (value: (((prevState: Note[]) => Note[]) | Note[])) => void }) => { const [selectedOffer, setSelectedOffer] = useAtom(SelectedOfferAtom) if (!selectedOffer) { return null; } return { const offerToSet = produce(selectedOffer, (updatedSelectedOffer) => { set(updatedSelectedOffer, `options.${fieldId}`, value); }); setSelectedOffer(offerToSet) atomsStore.set(SelectedOfferAtom, offerToSet) }}/>; } function isEditMode(): boolean { const {context: {data}} = atomsStore.get(SelectActionPopupWindowStateAtom) as PopupWindowState // @ts-ignore return !!data?.offerId } // @ts-ignore export const SelectOffers: Action = { id: 'select-offers', data: { name: 'Apply Offers', }, onOpen: ({data: {offerId}}: SelectActionContextOffers, setCurrentScreenId) => { // if mode is edit, then const modeIsEdit = isEditMode() if (modeIsEdit) { const store = useNodesStore.getState(); const tree = new Tree(store, new Testables(store)) // -add the offer to the state const selectedOffer = cloneDeep(tree.getOffer(offerId!)!); // -then change the screen to 3 atomsStore.set(SelectedOfferAtom, { ...selectedOffer, parentType: 'offers', }) atomsStore.set(SelectedOffersAtom, [selectedOffer]) setCurrentScreenId(3); } }, reset: () => { atomsStore.set(SelectedOfferAtom, null) atomsStore.set(SelectedOffersAtom, []) }, // @ts-ignore screens: ({context: {targetBranchId}}) => [ { id: 2, title: 'What kind of offer do you want to add?', content: () => { const [selectedOffer, setSelectedOffer] = useAtom(SelectedOfferAtom) const [selectedOffers, setSelectedOffers] = useAtom(SelectedOffersAtom) const {to} = UseScreenNavigationActions('select-action') return

Select your Offer

{ComponentsMeta.offers.map(offer=> )}
}, }, { id: 3, title: () => { const [selectedOffer] = useAtom(SelectedOfferAtom) return selectedOffer ? withDecodedEntities(getComponentMetaData(['offers', selectedOffer.type])).name : 'Select Offer' }, content: ({width, height}) => { const [selectedOffer, setSelectedOffer] = useAtom(SelectedOfferAtom) const [selectedOffers, setSelectedOffers] = useAtom(SelectedOffersAtom) const [notes, setNotes] = useState([]) return { const offertoSelect = selectedOffers.find(({type: t}) => t === type) || null; setSelectedOffer(offertoSelect) } } parentType={'offers'} onComponentRemove={() => {}} />} > ; }, contentWidth: () => fieldsContentWidth, primaryBottom: () => { return { label: isEditMode()? __('Apply Changes') : 'Add Offer', onClick: () => { const {updateOffer, addOffer} = useNodesStore.getState(); const selectedOffer = atomsStore.get(SelectedOfferAtom) as OfferData; if (isEditMode()) { // commit the changes! updateOffer(selectedOffer) } else { addOffer(selectedOffer, targetBranchId) } closeSelectActionsPopupWindow() }, }; } }, ], }