{"version":3,"file":"useDetailsHeader.hook.mjs","sources":["../../src/lib/hooks/useDetailsHeader.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*/\n\nimport React, { useCallback, useRef } from 'react'\nimport PropTypes from 'prop-types'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Link, useLocation, useNavigate, useParams } from 'react-router-dom'\n\nimport ActionsMenu from '../components/ActionsMenu/ActionsMenu'\nimport Button from '../components/Button/Button'\nimport LoadButton from '../components/LoadButton/LoadButton'\nimport RoundedIcon from '../components/RoundedIcon/RoundedIcon'\nimport TextTooltipTemplate from '../components/TooltipTemplate/TextTooltipTemplate'\nimport Tooltip from '../components/Tooltip/Tooltip'\n\nimport { ACTION_BUTTON, ACTIONS_MENU } from '../types'\nimport { TERTIARY_BUTTON, VIEW_SEARCH_PARAMETER, FULL_VIEW_MODE } from '../constants'\nimport { getFilteredSearchParams } from '../utils/filter.util'\nimport { getViewMode, performDetailsActionHelper } from '../utils/common.util'\n\nimport Close from '../images/close.svg?react'\nimport EnlargeIcon from '../images/ml-enlarge.svg?react'\nimport HistoryIcon from '../images/history.svg?react'\nimport MinimizeIcon from '../images/ml-minimize.svg?react'\nimport Refresh from '../images/refresh.svg?react'\n\nconst DetailsHeaderContainer = ({\n  actionButton = null,\n  actionsMenu,\n  applyChanges,\n  applyChangesRef,\n  cancelChanges,\n  commonDetailsStore,\n  getCloseDetailsLink = null,\n  getDefaultCloseDetailsLink,\n  handleActionClick,\n  handleCancelClick,\n  handleRefresh = null,\n  headerRef,\n  isDetailsPopUp = false,\n  isDetailsScreen,\n  location,\n  navigate,\n  pageData,\n  params,\n  renderCustomElements = null,\n  renderStatus = null,\n  renderTitle,\n  selectedItem,\n  showAllVersions = null,\n  tab = '',\n  viewMode = '',\n  withActionMenu = true,\n  withToggleViewBtn = false\n}) => {\n  return (\n    <div className=\"item-header\" ref={headerRef}>\n      <div className=\"item-header__data\">\n        <h3 className=\"item-header__title\">{renderTitle && renderTitle()}</h3>\n        <div className=\"item-header__status\">{renderStatus && renderStatus()}</div>\n      </div>\n      <div className=\"item-header__custom-elements\">\n        {renderCustomElements && renderCustomElements()}\n      </div>\n      <div className=\"item-header__buttons\">\n        {commonDetailsStore.changes.counter > 0 && !isDetailsPopUp && (\n          <>\n            <Button\n              variant={TERTIARY_BUTTON}\n              label=\"Cancel\"\n              onClick={cancelChanges}\n              disabled={commonDetailsStore.changes.counter === 0 || commonDetailsStore.editMode}\n            />\n            <Tooltip\n              template={\n                <TextTooltipTemplate\n                  text={`${commonDetailsStore.changes.counter} ${\n                    commonDetailsStore.changes.counter === 1 ? 'change pending' : 'changes pending'\n                  }`}\n                />\n              }\n            >\n              <LoadButton\n                ref={applyChangesRef}\n                variant=\"primary\"\n                label=\"Apply Changes\"\n                className=\"btn_apply-changes\"\n                onClick={applyChanges}\n                disabled={commonDetailsStore.changes.counter === 0 || commonDetailsStore.editMode}\n              />\n            </Tooltip>\n          </>\n        )}\n        {actionButton && !actionButton.hidden && (\n          <Button\n            disabled={actionButton.disabled}\n            label={actionButton.label}\n            onClick={event => {\n              handleActionClick(event, actionButton.onClick)\n            }}\n            tooltip={actionButton.tooltip}\n            variant={actionButton.variant}\n          />\n        )}\n        {showAllVersions && (\n          <RoundedIcon\n            id=\"showAllVersions\"\n            onClick={() => showAllVersions()}\n            tooltipText=\"Show all versions\"\n          >\n            <HistoryIcon />\n          </RoundedIcon>\n        )}\n        {isDetailsScreen && handleRefresh && (\n          <RoundedIcon\n            id=\"refresh\"\n            onClick={() => handleRefresh(selectedItem)}\n            tooltipText=\"Refresh\"\n          >\n            <Refresh />\n          </RoundedIcon>\n        )}\n        {withActionMenu && <ActionsMenu dataItem={selectedItem} menu={actionsMenu} time={500} />}\n        <div className=\"item-header__navigation-buttons\">\n          {withToggleViewBtn && !isDetailsPopUp && (\n            <>\n              {viewMode !== FULL_VIEW_MODE && (\n                <RoundedIcon\n                  onClick={() => {\n                    navigate(\n                      `${location.pathname}${window.location.search}${window.location.search ? '&' : '?'}${VIEW_SEARCH_PARAMETER}=full`\n                    )\n                  }}\n                  id=\"full-view\"\n                  tooltipText=\"Full view\"\n                >\n                  <EnlargeIcon />\n                </RoundedIcon>\n              )}\n              {viewMode === FULL_VIEW_MODE && (\n                <RoundedIcon\n                  onClick={() => {\n                    navigate(\n                      `${location.pathname}${getFilteredSearchParams(window.location.search, [VIEW_SEARCH_PARAMETER])}`\n                    )\n                  }}\n                  id=\"table-view\"\n                  tooltipText=\"Table view\"\n                >\n                  <MinimizeIcon />\n                </RoundedIcon>\n              )}\n            </>\n          )}\n          {!pageData.details.hideCloseBtn &&\n            (isDetailsPopUp ? (\n              <div\n                className=\"details-close-btn\"\n                data-testid=\"details-close-btn\"\n                onClick={handleCancelClick}\n              >\n                <RoundedIcon tooltipText=\"Close\" id=\"details-close\">\n                  <Close />\n                </RoundedIcon>\n              </div>\n            ) : (\n              <Link\n                className=\"details-close-btn\"\n                data-testid=\"details-close-btn\"\n                to={\n                  getCloseDetailsLink\n                    ? getCloseDetailsLink(selectedItem.name)\n                    : getDefaultCloseDetailsLink(params, pageData.page, tab)\n                }\n                onClick={handleCancelClick}\n              >\n                <RoundedIcon tooltipText=\"Close\" id=\"details-close\">\n                  <Close />\n                </RoundedIcon>\n              </Link>\n            ))}\n        </div>\n      </div>\n    </div>\n  )\n}\n\nDetailsHeaderContainer.propTypes = {\n  actionButton: ACTION_BUTTON,\n  actionsMenu: ACTIONS_MENU.isRequired,\n  applyChanges: PropTypes.func.isRequired,\n  applyChangesRef: PropTypes.object.isRequired,\n  cancelChanges: PropTypes.func.isRequired,\n  commonDetailsStore: PropTypes.object.isRequired,\n  getCloseDetailsLink: PropTypes.func,\n  getDefaultCloseDetailsLink: PropTypes.func.isRequired,\n  handleActionClick: PropTypes.func.isRequired,\n  handleCancelClick: PropTypes.func.isRequired,\n  handleRefresh: PropTypes.func,\n  headerRef: PropTypes.object.isRequired,\n  isDetailsPopUp: PropTypes.bool,\n  isDetailsScreen: PropTypes.bool.isRequired,\n  location: PropTypes.object.isRequired,\n  navigate: PropTypes.func.isRequired,\n  pageData: PropTypes.object.isRequired,\n  params: PropTypes.object.isRequired,\n  renderCustomElements: PropTypes.func,\n  renderStatus: PropTypes.func,\n  renderTitle: PropTypes.func.isRequired,\n  selectedItem: PropTypes.object.isRequired,\n  showAllVersions: PropTypes.func,\n  tab: PropTypes.string,\n  viewMode: PropTypes.string,\n  withActionMenu: PropTypes.bool,\n  withToggleViewBtn: PropTypes.bool\n}\n\nexport const useDetailsHeader = ({ handleCancel, handleShowWarning, isDetailsPopUp, pageData }) => {\n  const commonDetailsStore = useSelector(store => store.commonDetailsStore)\n  const dispatch = useDispatch()\n  const params = useParams()\n  const navigate = useNavigate()\n  const viewMode = getViewMode(window.location.search)\n  const { actionButton, withToggleViewBtn, showAllVersions } = pageData.details\n  const headerRef = useRef()\n  const location = useLocation()\n\n  const handleActionClick = async (event, handler) => {\n    const actionCanBePerformed = await performDetailsActionHelper(\n      commonDetailsStore.changes,\n      dispatch\n    )\n\n    if (actionCanBePerformed) {\n      handler(event)\n    }\n  }\n\n  const handleBackClick = useCallback(() => {\n    if (commonDetailsStore.changes.counter > 0) {\n      handleShowWarning(true)\n    } else if (handleCancel) {\n      handleCancel()\n    }\n  }, [commonDetailsStore.changes.counter, handleCancel, handleShowWarning])\n\n  const handleCancelClick = useCallback(() => {\n    if (handleCancel && (commonDetailsStore.changes.counter === 0 || isDetailsPopUp)) {\n      handleCancel()\n    }\n  }, [commonDetailsStore.changes.counter, handleCancel, isDetailsPopUp])\n\n  return {\n    DetailsHeaderContainer,\n    actionButton,\n    commonDetailsStore,\n    handleActionClick,\n    handleBackClick,\n    handleCancelClick,\n    headerRef,\n    location,\n    navigate,\n    params,\n    showAllVersions,\n    viewMode,\n    withToggleViewBtn\n  }\n}\n"],"names":["DetailsHeaderContainer","actionButton","actionsMenu","applyChanges","applyChangesRef","cancelChanges","commonDetailsStore","getCloseDetailsLink","getDefaultCloseDetailsLink","handleActionClick","handleCancelClick","handleRefresh","headerRef","isDetailsPopUp","isDetailsScreen","location","navigate","pageData","params","renderCustomElements","renderStatus","renderTitle","selectedItem","showAllVersions","tab","viewMode","withActionMenu","withToggleViewBtn","jsxs","jsx","Fragment","Button","TERTIARY_BUTTON","Tooltip","TextTooltipTemplate","LoadButton","event","RoundedIcon","HistoryIcon","Refresh","ActionsMenu","FULL_VIEW_MODE","VIEW_SEARCH_PARAMETER","EnlargeIcon","getFilteredSearchParams","MinimizeIcon","Close","Link","ACTION_BUTTON","ACTIONS_MENU","PropTypes","useDetailsHeader","handleCancel","handleShowWarning","useSelector","store","dispatch","useDispatch","useParams","useNavigate","getViewMode","useRef","useLocation","handler","performDetailsActionHelper","handleBackClick","useCallback"],"mappings":"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"}