{"version":3,"file":"useDetails.hook.mjs","sources":["../../src/lib/hooks/useDetails.hook.jsx"],"sourcesContent":["/*\nCopyright 2019 Iguazio Systems Ltd.\n\nLicensed under the Apache License, Version 2.0 (the \"License\") with\nan addition restriction as set forth herein. You may not use this\nfile except in compliance with the License. You may obtain a copy of\nthe License at http://www.apache.org/licenses/LICENSE-2.0.\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\nimplied. See the License for the specific language governing\npermissions and limitations under the License.\n\nIn addition, you may not use the software for any purposes that are\nillegal under applicable law, and the grant of the foregoing license\nunder the Apache 2.0 license is conditioned upon your compliance with\nsuch restriction.\n*/\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport arrayMutators from 'final-form-arrays'\nimport classnames from 'classnames'\nimport { Form } from 'react-final-form'\nimport { cloneDeep, isEqual, pickBy } from 'lodash'\nimport { createForm } from 'final-form'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { useLocation, useParams } from 'react-router-dom'\n\nimport BlockerSpy from '../components/BlockerSpy/BlockerSpy'\nimport ErrorMessage from '../components/ErrorMessage/ErrorMessage'\nimport Loader from '../components/Loader/Loader'\nimport TabsSlider from '../components/TabsSlider/TabsSlider'\nimport ConfirmDialog from '../components/ConfirmDialog/ConfirmDialog'\n\nimport {\n  removeDetailsPopUpInfoContent,\n  removeInfoContent,\n  resetChanges,\n  setDetailsPopUpInfoContent,\n  setEditMode,\n  setFiltersWasHandled,\n  setInfoContent,\n  showWarning\n} from '../reducers/commonDetailsReducer'\nimport { PRIMARY_BUTTON, TERTIARY_BUTTON } from '../constants'\nimport { VIEW_SEARCH_PARAMETER } from '../constants'\nimport { DETAILS_MENU } from '../types'\nimport { setFieldState } from '../utils/form.util'\n\nconst DetailsContainer = ({\n  blocker,\n  commonDetailsStore,\n  detailsMenu,\n  detailsPanelClassNames,\n  detailsPopUpSelectedTab = '',\n  detailsRef,\n  detailsStore,\n  doNotLeavePage,\n  formRef,\n  isDetailsPopUp = null,\n  leavePage,\n  params,\n  renderHeader,\n  renderTabsContent,\n  setBlocker,\n  setDetailsPopUpSelectedTab = null,\n  shouldDetailsBlock,\n  withActionMenu = true\n}) => {\n  return (\n    <Form form={formRef.current} onSubmit={() => {}}>\n      {formState => (\n        <div className={detailsPanelClassNames} ref={detailsRef} data-testid=\"detailsPanel\">\n          {detailsStore.loadingCounter > 0 && <Loader />}\n          {detailsStore.error && <ErrorMessage message={detailsStore.error.message} />}\n          <div className=\"item-header-wrapper\">\n            {renderHeader()}\n            {withActionMenu && (\n              <TabsSlider\n                initialTab={isDetailsPopUp ? detailsPopUpSelectedTab : params.tab}\n                isDetailsPopUp={isDetailsPopUp}\n                onClick={newTab => setDetailsPopUpSelectedTab && setDetailsPopUpSelectedTab(newTab)}\n                skipLink={isDetailsPopUp}\n                tabsList={detailsMenu}\n              />\n            )}\n          </div>\n          <div className=\"item-info\">{renderTabsContent(formState)}</div>\n          {(blocker.state === 'blocked' || commonDetailsStore.showWarning) && (\n            <ConfirmDialog\n              cancelButton={{\n                handler: doNotLeavePage,\n                label: 'Cancel',\n                variant: TERTIARY_BUTTON\n              }}\n              closePopUp={doNotLeavePage}\n              confirmButton={{\n                handler: leavePage,\n                label: 'Yes',\n                variant: PRIMARY_BUTTON\n              }}\n              header=\"You have unsaved changes.\"\n              isOpen={blocker.state === 'blocked' || commonDetailsStore.showWarning}\n              message=\"Do you want to discard the changes?\"\n            />\n          )}\n          {!isDetailsPopUp && (\n            <BlockerSpy setBlocker={setBlocker} shouldBlock={shouldDetailsBlock} />\n          )}\n        </div>\n      )}\n    </Form>\n  )\n}\n\nDetailsContainer.propTypes = {\n  blocker: PropTypes.object.isRequired,\n  detailsMenu: DETAILS_MENU.isRequired,\n  detailsPanelClassNames: PropTypes.string.isRequired,\n  detailsPopUpSelectedTab: PropTypes.string,\n  detailsRef: PropTypes.object.isRequired,\n  detailsStore: PropTypes.object.isRequired,\n  commonDetailsStore: PropTypes.object.isRequired,\n  doNotLeavePage: PropTypes.func.isRequired,\n  formRef: PropTypes.object.isRequired,\n  isDetailsPopUp: PropTypes.bool,\n  leavePage: PropTypes.func.isRequired,\n  params: PropTypes.object.isRequired,\n  renderHeader: PropTypes.func.isRequired,\n  renderTabsContent: PropTypes.func.isRequired,\n  setBlocker: PropTypes.func.isRequired,\n  setDetailsPopUpSelectedTab: PropTypes.func,\n  shouldDetailsBlock: PropTypes.func.isRequired,\n  withActionMenu: PropTypes.bool\n}\n\nexport const useDetails = ({\n  applyDetailsChanges,\n  applyDetailsChangesCallback,\n  formInitialValues,\n  isDetailsPopUp,\n  isDetailsScreen,\n  selectedItem\n}) => {\n  const [blocker, setBlocker] = useState({})\n  const applyChangesRef = useRef()\n  const dispatch = useDispatch()\n  const detailsRef = useRef()\n  const params = useParams()\n  const commonDetailsStore = useSelector(store => store.commonDetailsStore)\n  const location = useLocation()\n  const [setDetailsInfo, removeDetailsInfo] = useMemo(() => {\n    return isDetailsPopUp\n      ? [setDetailsPopUpInfoContent, removeDetailsPopUpInfoContent]\n      : [setInfoContent, removeInfoContent]\n  }, [isDetailsPopUp])\n  const previousPathnameRef = useRef(\n    location.pathname.substring(0, location.pathname.lastIndexOf(params.tab))\n  )\n  const detailsPanelClassNames = classnames(\n    'table__item',\n    commonDetailsStore.showWarning && 'pop-up-dialog-opened',\n    isDetailsScreen && 'table__item_big',\n    isDetailsPopUp && 'table__item-popup'\n  )\n\n  const formRef = useRef(\n    createForm({\n      initialValues: formInitialValues,\n      mutators: { ...arrayMutators, setFieldState },\n      onSubmit: () => {}\n    })\n  )\n\n  useEffect(() => {\n    return () => {\n      if (!isDetailsPopUp) {\n        dispatch(resetChanges())\n      }\n    }\n  }, [dispatch, isDetailsPopUp])\n\n  const handleShowWarning = useCallback(\n    show => {\n      dispatch(showWarning(show))\n    },\n    [dispatch]\n  )\n\n  const handleRefreshClick = useCallback(\n    event => {\n      if (\n        commonDetailsStore.changes.counter > 0 &&\n        document.getElementById('refresh')?.contains(event.target)\n      ) {\n        handleShowWarning(true)\n        dispatch(setFiltersWasHandled(true))\n      }\n    },\n    [commonDetailsStore.changes.counter, dispatch, handleShowWarning]\n  )\n\n  useEffect(() => {\n    window.addEventListener('click', handleRefreshClick)\n\n    return () => {\n      window.removeEventListener('click', handleRefreshClick)\n    }\n  }, [handleRefreshClick])\n\n  const shouldDetailsBlock = useCallback(\n    ({ currentLocation, nextLocation }) => {\n      const currentDetailsView = currentLocation.search.split(`${VIEW_SEARCH_PARAMETER}=`)?.[1]\n      const nextDetailsView = nextLocation.search.split(`${VIEW_SEARCH_PARAMETER}=`)?.[1]\n      const currentLocationPathname = currentLocation.pathname.split('/')\n      const nextLocationPathname = nextLocation.pathname.split('/')\n      currentLocationPathname.pop()\n      nextLocationPathname.pop()\n\n      return (\n        commonDetailsStore.changes.counter > 0 &&\n        (currentLocationPathname.join('/') !== nextLocationPathname.join('/') ||\n          currentDetailsView !== nextDetailsView)\n      )\n    },\n    [commonDetailsStore.changes.counter]\n  )\n\n  useEffect(() => {\n    if (\n      formRef.current &&\n      commonDetailsStore.changes.counter === 0 &&\n      !isEqual(pickBy(formInitialValues), pickBy(formRef.current.getState()?.values)) &&\n      !formRef.current.getState()?.active\n    ) {\n      formRef.current.restart(formInitialValues)\n    }\n  }, [formInitialValues, commonDetailsStore.changes.counter])\n\n  useEffect(() => {\n    const currentPathname = location.pathname.substring(\n      0,\n      location.pathname.lastIndexOf(params.tab)\n    )\n\n    if (previousPathnameRef.current !== currentPathname && !isDetailsPopUp) {\n      formRef.current.restart(formInitialValues)\n      dispatch(setEditMode(false))\n      previousPathnameRef.current = currentPathname\n    }\n  }, [dispatch, formInitialValues, isDetailsPopUp, location.pathname, params.tab])\n\n  const applyChanges = useCallback(() => {\n    applyDetailsChanges(commonDetailsStore.changes)\n      .then(() => {\n        dispatch(resetChanges())\n\n        const changes = cloneDeep(commonDetailsStore.changes)\n\n        // todo [redux-toolkit] rework it after redux-toolkit will be added to the details store. Need to remove setTimeout and use a Promise that resolves after the state is updated.\n        setTimeout(() => {\n          applyDetailsChangesCallback(changes, selectedItem)\n        })\n      })\n      .catch(() => {})\n  }, [\n    applyDetailsChanges,\n    applyDetailsChangesCallback,\n    commonDetailsStore.changes,\n    dispatch,\n    selectedItem\n  ])\n\n  const cancelChanges = useCallback(() => {\n    if (commonDetailsStore.changes.counter > 0) {\n      dispatch(resetChanges())\n      formRef.current.reset(formInitialValues)\n    }\n  }, [commonDetailsStore.changes.counter, dispatch, formInitialValues])\n\n  const leavePage = useCallback(() => {\n    cancelChanges()\n    handleShowWarning(false)\n\n    if (commonDetailsStore.filtersWasHandled) {\n      dispatch(setFiltersWasHandled(false))\n    }\n\n    blocker.proceed?.()\n\n    window.dispatchEvent(new CustomEvent('discardChanges'))\n  }, [blocker, cancelChanges, commonDetailsStore.filtersWasHandled, dispatch, handleShowWarning])\n\n  const doNotLeavePage = useCallback(() => {\n    blocker.reset?.()\n    dispatch(showWarning(false))\n    window.dispatchEvent(new CustomEvent('cancelLeave'))\n  }, [blocker, dispatch])\n\n  return {\n    DetailsContainer,\n    applyChanges,\n    applyChangesRef,\n    blocker,\n    cancelChanges,\n    detailsPanelClassNames,\n    detailsRef,\n    commonDetailsStore,\n    doNotLeavePage,\n    formRef,\n    handleShowWarning,\n    leavePage,\n    location,\n    params,\n    removeDetailsInfo,\n    setBlocker,\n    setDetailsInfo,\n    shouldDetailsBlock\n  }\n}\n"],"names":["DetailsContainer","blocker","commonDetailsStore","detailsMenu","detailsPanelClassNames","detailsPopUpSelectedTab","detailsRef","detailsStore","doNotLeavePage","formRef","isDetailsPopUp","leavePage","params","renderHeader","renderTabsContent","setBlocker","setDetailsPopUpSelectedTab","shouldDetailsBlock","withActionMenu","Form","jsxs","jsx","Loader","ErrorMessage","TabsSlider","newTab","formState","ConfirmDialog","TERTIARY_BUTTON","PRIMARY_BUTTON","BlockerSpy","PropTypes","DETAILS_MENU","useDetails","applyDetailsChanges","applyDetailsChangesCallback","formInitialValues","isDetailsScreen","selectedItem","useState","applyChangesRef","useRef","dispatch","useDispatch","useParams","useSelector","store","location","useLocation","setDetailsInfo","removeDetailsInfo","useMemo","setDetailsPopUpInfoContent","removeDetailsPopUpInfoContent","setInfoContent","removeInfoContent","previousPathnameRef","classnames","createForm","arrayMutators","setFieldState","useEffect","resetChanges","handleShowWarning","useCallback","show","showWarning","handleRefreshClick","event","_a","setFiltersWasHandled","currentLocation","nextLocation","currentDetailsView","VIEW_SEARCH_PARAMETER","nextDetailsView","_b","currentLocationPathname","nextLocationPathname","isEqual","pickBy","currentPathname","setEditMode","applyChanges","changes","cloneDeep","cancelChanges"],"mappings":"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"}