UNPKG

@hisptz/react-ui

Version:

A collection of reusable complex DHIS2 react ui components.

98 lines (90 loc) 2.94 kB
import i18n from "@dhis2/d2-i18n"; import { cloneDeep, findIndex, set } from "lodash"; import { useCallback } from "react"; import { useConfirmDialog } from "../../ConfirmDialog"; import { getDefaultLegendDefinitions, getNonDefaultLegendDefinitions } from "../utils"; export function useManageLegendDefinitions(legendDefinitions, _ref) { let { onChange, shouldVerify, onResetLegends } = _ref; const { confirm } = useConfirmDialog(); const nonDefaultLegendDefinitions = getNonDefaultLegendDefinitions(legendDefinitions); const defaultLegendDefinitions = getDefaultLegendDefinitions(legendDefinitions); const onAdd = useCallback(value => { const newLegendDefinitions = [...cloneDeep(legendDefinitions), value]; function add() { onChange(newLegendDefinitions); } if (shouldVerify) { confirm({ onCancel() {}, title: i18n.t("Confirm legend reset"), message: i18n.t("Adding a legend definition will reset all legends to their default values. Are you sure you want to continue?"), confirmButtonColor: "primary", confirmButtonText: i18n.t("Reset"), onConfirm: () => { add(); onResetLegends(newLegendDefinitions); }, customActions: [{ label: i18n.t("Leave as is"), onClick: () => { add(); } }] }); } else { add(); } }, [confirm, legendDefinitions, onResetLegends, shouldVerify]); const onDelete = useCallback(data => { const updatedDefinitions = cloneDeep(legendDefinitions); const index = findIndex(updatedDefinitions, _ref2 => { let { id: legendDefinitionId } = _ref2; return legendDefinitionId === data.id; }); updatedDefinitions.splice(index, 1); function deleteDefinition() { onChange(updatedDefinitions); } if (shouldVerify) { confirm({ onCancel() {}, title: "".concat(i18n.t("Confirm legends reset")), message: "".concat(i18n.t("Deleting this definition will reset all configured legends. Are you sure you want to delete this legend definition?")), confirmButtonColor: "primary", confirmButtonText: i18n.t("Reset"), onConfirm: () => { deleteDefinition(); onResetLegends(updatedDefinitions); } }); } else { deleteDefinition(); } }, [confirm, legendDefinitions, onResetLegends, shouldVerify]); const onEdit = data => { const updatedDefinitions = cloneDeep(legendDefinitions); const index = findIndex(updatedDefinitions, _ref3 => { let { id: legendDefinitionId } = _ref3; return legendDefinitionId === data.id; }); set(updatedDefinitions, index, data); onChange(updatedDefinitions); }; return { nonDefaultLegendDefinitions, defaultLegendDefinitions, onAdd, onDelete, onEdit }; }