sccoreui
Version:
ui-sccore
192 lines (191 loc) • 9.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FeatureContext = void 0;
const tslib_1 = require("tslib");
const jsx_runtime_1 = require("react/jsx-runtime");
const react_1 = require("react");
const helper_1 = require("./helper");
const hooks_1 = require("primereact/hooks");
const constants_1 = tslib_1.__importDefault(require("./constants"));
exports.FeatureContext = (0, react_1.createContext)(null);
function MyProvider({ children, value }) {
const { featureDetails, setFeatureDetails, gridData, callGrid, totalRecords, initialFeature, defaultFilters, defaultSearchText, defaultSort, createView, enableViewCreate, filterModelText, sortModelText, recordDetailModelText, sidePanelText, sortOptions, filterConditions, clearFilters, onFiltersCleared, setGridData, gridApi, updateColumnsForGrid, enableManageColumnsCallback, columnToRender, selectedGroup, setSelectedGroup, initialCheckBoxData, intialColumns, setIntialColumns, rowModelType, quickSearch, enableAdvancedFilter, conditionsToDisplay, gridViewFun, gridViewData, setGridViewData, gridView, serverSideSelectRow, defaultViewName, isDataLoading,
// dynamicText
renderSelectField, renderMultiSelectField, } = value;
// States for sort
const [columnData, setColumnData] = (0, react_1.useState)(gridData === null || gridData === void 0 ? void 0 : gridData.columnData);
(0, react_1.useEffect)(() => {
if (gridData === null || gridData === void 0 ? void 0 : gridData.columnData) {
setColumnData(gridData.columnData);
}
}, [gridData === null || gridData === void 0 ? void 0 : gridData.columnData]);
const [inputValue, deboucedValue, setInputValue] = (0, hooks_1.useDebounce)(defaultSearchText || "", 500);
const [sortValue, setSortValue] = (0, react_1.useState)({});
const [sortBy, setSortBy] = (0, react_1.useState)({});
const [isOverlayOpened, setIsOverlayOpened] = (0, react_1.useState)(false);
const [viewName, setViewName] = (0, react_1.useState)(defaultViewName || "");
// States for filter
const [queries, setQueries] = (0, react_1.useState)(() => {
var _a;
const length = ((_a = featureDetails === null || featureDetails === void 0 ? void 0 : featureDetails.filterQueries) === null || _a === void 0 ? void 0 : _a.length) || 0;
// Returns based on length of filterQueries present
return length === 0 ? [0] : Array.from({ length }, (_, index) => index);
});
const conditionTypes = filterConditions
? filterConditions
: [
{ id: 1, label: "AND" },
{ id: 2, label: "OR" },
];
const [conditionType, setConditionType] = (0, react_1.useState)((defaultFilters === null || defaultFilters === void 0 ? void 0 : defaultFilters.logicalOperator)
? conditionTypes.find((item) => item.id === (defaultFilters === null || defaultFilters === void 0 ? void 0 : defaultFilters.logicalOperator))
: conditionTypes[0]);
const [globalFilters, setGlobalFilters] = (0, react_1.useState)([]);
const [showAsSave, setShowAsSave] = (0, react_1.useState)(false);
// Function call on click to refresh
const removeFeaturesAndRefresh = () => {
const emptyFeatures = initialFeature;
// Remove stored features
setFeatureDetails(emptyFeatures);
// Remove filter
setQueries([0]);
// Remove sort
setSortBy({});
setSortValue({});
setInputValue("");
callGrid(emptyFeatures);
};
/**
* Transform and set default filters to globalFilters state
* Handles both API output format and internal format:
* - API format: { selectedColumn: { code: {...} }, selectedOperation: 1, value, logicalOperator }
* - Internal format: { columnName: {...}, condition: {...}, value, logicalOperator }
*/
(0, react_1.useEffect)(() => {
if (defaultFilters.length) {
const filtersToAdd = defaultFilters.map((filter) => {
var _a, _b, _c;
// Extract column data from either format
const columnName = ((_a = filter.selectedColumn) === null || _a === void 0 ? void 0 : _a.code) || filter.columnName;
// Extract condition - can be a number or object
const conditionValue = (_b = filter.selectedOperation) !== null && _b !== void 0 ? _b : filter.condition;
const condition = typeof conditionValue === 'object'
? conditionValue
: constants_1.default.conditionsList.find((c) => c.value === conditionValue);
return {
columnName,
condition,
value: (0, helper_1.parseIfNeeded)(filter.value),
id: filter.id || Math.random().toString(),
isActive: (_c = filter.isActive) !== null && _c !== void 0 ? _c : true,
logicalOperator: filter.logicalOperator,
};
});
setGlobalFilters(filtersToAdd);
}
else {
// Clear filters when switching to a view with no filters (e.g. "All" view)
setGlobalFilters([]);
}
}, [defaultFilters]);
/**
* Transform and set default sort to sortValue and sortBy states
* Handles API format: { direction: 1|2, propertyName: "fieldName" }
* - direction: 1 = ascending, 2 = descending
* - propertyName: field name to sort by
*/
(0, react_1.useEffect)(() => {
if (defaultSort && defaultSort.propertyName && defaultSort.direction) {
// Find matching column from columnData based on propertyName
const matchingColumn = columnData === null || columnData === void 0 ? void 0 : columnData.find((col) => col.field === defaultSort.propertyName ||
col.fieldKey === defaultSort.propertyName ||
col.headerName === defaultSort.propertyName);
if (matchingColumn) {
setSortValue(matchingColumn);
// Find matching sort option based on direction and dataType
const matchingSortOption = sortOptions === null || sortOptions === void 0 ? void 0 : sortOptions.find((opt) => opt.sortId === defaultSort.direction &&
opt.dataType === matchingColumn.dataType);
if (matchingSortOption) {
setSortBy(matchingSortOption);
}
}
}
}, [defaultSort, columnData, sortOptions]);
// Sync search input when defaultSearchText changes (e.g. switching saved views)
(0, react_1.useEffect)(() => {
setInputValue(defaultSearchText || "");
}, [defaultSearchText]);
// Update viewName when defaultViewName changes
(0, react_1.useEffect)(() => {
if (defaultViewName) {
setViewName(defaultViewName);
}
}, [defaultViewName]);
// Empty filters and call the grid
(0, react_1.useEffect)(() => {
// Only clear if clearFilters is explicitly true (not just truthy like [])
if (clearFilters === true) {
let currentFeature = featureDetails;
currentFeature.filterQueries = [];
setSelectedGroup([]);
setFeatureDetails(Object.assign(Object.assign({}, featureDetails), { checkBoxSelection: initialCheckBoxData }));
setGlobalFilters([]);
callGrid(currentFeature);
}
}, [clearFilters]);
return ((0, jsx_runtime_1.jsx)(exports.FeatureContext.Provider, Object.assign({ value: {
sortValue,
setSortValue,
sortBy,
setSortBy,
isOverlayOpened,
setIsOverlayOpened,
queries,
setQueries,
featureDetails,
setFeatureDetails,
columnData,
callGrid,
removeFeaturesAndRefresh,
totalRecords,
conditionTypes,
conditionType,
setConditionType,
globalFilters,
setGlobalFilters,
showAsSave,
setShowAsSave,
setViewName,
viewName,
createView,
enableViewCreate,
filterModelText,
sortModelText,
recordDetailModelText,
sidePanelText,
sortOptions,
setGridData,
gridData,
gridApi,
updateColumnsForGrid,
enableManageColumnsCallback,
columnToRender,
selectedGroup,
setSelectedGroup,
initialCheckBoxData,
intialColumns,
setIntialColumns,
rowModelType,
quickSearch,
enableAdvancedFilter,
conditionsToDisplay,
gridViewFun,
gridViewData,
setGridViewData,
gridView,
inputValue, deboucedValue, setInputValue, serverSideSelectRow, isDataLoading,
renderSelectField, renderMultiSelectField,
onFiltersCleared,
} }, { children: children })));
}
exports.default = MyProvider;