Merged in feature/IO-2886-Product-List-Profiles (pull request #1633)

Feature/IO-2886 Product List Profiles
This commit is contained in:
Dave Richer
2024-08-20 18:13:13 +00:00
2 changed files with 95 additions and 7 deletions

View File

@@ -59,7 +59,22 @@ export function ProductionListConfigManager({
const defaultConfig = { const defaultConfig = {
name: t("production.constants.main_profile"), name: t("production.constants.main_profile"),
columns: { columns: {
columnKeys: columns.map((i) => ({ key: i.key, width: i.width })), columnKeys: [
{ key: "ro_number", width: 100 },
{ key: "ownr", width: 100 },
{ key: "vehicle", width: 100 },
{ key: "ins_co_nm", width: 100 },
{ key: "actual_in", width: 100 },
{ key: "scheduled_completion", width: 100 },
{ key: "labhrs", width: 100 },
{ key: "employee_body", width: 100 },
{ key: "larhrs", width: 100 },
{ key: "employee_refinish", width: 100 },
{ key: "tt", width: 100 },
{ key: "status", width: 100 },
{ key: "sublets", width: 100 },
{ key: "viewdetail", width: 100 }
],
tableState: ensureDefaultState(state) tableState: ensureDefaultState(state)
} }
}; };
@@ -75,9 +90,7 @@ export function ProductionListConfigManager({
if (!result.errors) { if (!result.errors) {
await updateActiveProdView(t("production.constants.main_profile")); await updateActiveProdView(t("production.constants.main_profile"));
setColumns(defaultConfig.columns.columnKeys); window.location.reload(); // Reload the page
setState(defaultConfig.columns.tableState);
notification.success({ message: t("bodyshop.successes.defaultviewcreated") });
} else { } else {
notification.error({ notification.error({
message: t("bodyshop.errors.creatingdefaultview", { message: t("bodyshop.errors.creatingdefaultview", {
@@ -144,6 +157,41 @@ export function ProductionListConfigManager({
const selectedConfig = bodyshop.production_config.find((pc) => pc.name === value); const selectedConfig = bodyshop.production_config.find((pc) => pc.name === value);
// If the selected profile doesn't exist, revert to the main profile
if (!selectedConfig) {
const mainProfileConfig = bodyshop.production_config.find(
(pc) => pc.name === t("production.constants.main_profile")
);
if (mainProfileConfig) {
await updateActiveProdView(t("production.constants.main_profile"));
setColumns(
mainProfileConfig.columns.columnKeys.map((k) => {
return {
...ProductionListColumns({
bodyshop,
refetch,
technician,
state: ensureDefaultState(state),
data: data,
activeStatuses: bodyshop.md_ro_statuses.active_statuses,
treatments: { Enhanced_Payroll }
}).find((e) => e.key === k.key),
width: k.width
};
})
);
const newState = ensureDefaultState(mainProfileConfig.columns.tableState);
setState(newState);
if (onSave && isFunction(onSave)) {
onSave();
}
return;
}
}
// If the selected profile exists, proceed as normal
if (selectedConfig) { if (selectedConfig) {
const newColumns = selectedConfig.columns.columnKeys.map((k) => { const newColumns = selectedConfig.columns.columnKeys.map((k) => {
return { return {
@@ -174,6 +222,7 @@ export function ProductionListConfigManager({
if (name === t("production.constants.main_profile")) return; if (name === t("production.constants.main_profile")) return;
const remainingConfigs = bodyshop.production_config.filter((b) => b.name !== name); const remainingConfigs = bodyshop.production_config.filter((b) => b.name !== name);
await updateShop({ await updateShop({
variables: { variables: {
id: bodyshop.id, id: bodyshop.id,
@@ -185,6 +234,7 @@ export function ProductionListConfigManager({
}); });
if (name === activeView) { if (name === activeView) {
// Only switch profiles if the deleted profile was the active profile
if (remainingConfigs.length > 0) { if (remainingConfigs.length > 0) {
const nextConfig = remainingConfigs[0]; const nextConfig = remainingConfigs[0];
await updateActiveProdView(nextConfig.name); await updateActiveProdView(nextConfig.name);
@@ -260,12 +310,50 @@ export function ProductionListConfigManager({
}; };
useEffect(() => { useEffect(() => {
const validateAndSetDefaultView = () => {
const configExists = bodyshop.production_config.some((pc) => pc.name === defaultView);
if (!configExists) {
// If the default view doesn't exist, revert to the main profile
const mainProfileConfig = bodyshop.production_config.find(
(pc) => pc.name === t("production.constants.main_profile")
);
if (mainProfileConfig) {
setActiveView(t("production.constants.main_profile"));
setColumns(
mainProfileConfig.columns.columnKeys.map((k) => {
return {
...ProductionListColumns({
bodyshop,
refetch,
technician,
state: ensureDefaultState(state),
data: data,
activeStatuses: bodyshop.md_ro_statuses.active_statuses,
treatments: { Enhanced_Payroll }
}).find((e) => e.key === k.key),
width: k.width
};
})
);
setState(ensureDefaultState(mainProfileConfig.columns.tableState));
updateActiveProdView(t("production.constants.main_profile"));
}
} else {
// If the default view exists, set it as active
setActiveView(defaultView);
}
};
if (!bodyshop.production_config || bodyshop.production_config.length === 0) { if (!bodyshop.production_config || bodyshop.production_config.length === 0) {
createDefaultView().catch((e) => { createDefaultView().catch((e) => {
console.error("Something went wrong saving the production list view Config."); console.error("Something went wrong saving the production list view Config.");
}); });
} else { } else {
setActiveView(defaultView); validateAndSetDefaultView();
} }
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, [defaultView, bodyshop.production_config]); }, [defaultView, bodyshop.production_config]);
@@ -309,7 +397,7 @@ export function ProductionListConfigManager({
placeholder={t("production.labels.selectview")} placeholder={t("production.labels.selectview")}
optionLabelProp="label" optionLabelProp="label"
popupMatchSelectWidth={false} popupMatchSelectWidth={false}
value={activeView} value={activeView} // Ensure this only changes when appropriate
> >
{bodyshop.production_config {bodyshop.production_config
.slice() .slice()

View File

@@ -2737,7 +2737,7 @@
}, },
"production": { "production": {
"constants":{ "constants":{
"main_profile": "Main" "main_profile": "Default"
}, },
"options": { "options": {
"small": "Small", "small": "Small",