Skip to content

FOUR-20591:Implement save / get configurations per user in FE #7914

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jan 17, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 21 additions & 2 deletions resources/jscomposition/cases/casesMain/CasesDataSection.vue
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,9 @@ import { getColumns } from "./config/columns";
import { FilterableTable, TablePlaceholder } from "../../system";
import * as api from "./api";
import { user } from "./variables";
import { formatFilters, formatFilterBadges } from "./utils";
import {
formatFilters, formatFilterBadges, formattedFilter, formatFilterSaved,
} from "./utils";

const props = defineProps({
listId: {
Expand Down Expand Up @@ -78,6 +80,11 @@ const setMetaPagination = (meta) => {
};
};

const getFilters = async () => {
const response = await api.getCaseFilters(route.params?.id);
return response;
};

const getData = async () => {
const sortFilter = filters.value.find((e) => e.sortable); // Searching the filter sortable

Expand Down Expand Up @@ -131,7 +138,14 @@ const onChangeSearch = async (val) => {
await hookGetData();
};

const saveFilters = async (filtersData) => {
const response = await api.saveCaseFilters(formattedFilter(filtersData), route.params?.id);
return response;
};

const onChangeFilter = async (filtersData) => {
saveFilters(filtersData);

filters.value = filtersData;
dataPagination.value.page = 1; // Reset page to 1

Expand All @@ -151,7 +165,12 @@ const onRemoveBadge = async (badge, index) => {
};

onMounted(async () => {
await hookGetData();
getFilters().then((response) => {
const filtersSaved = formatFilterSaved(response.data.filters);
filters.value = filtersSaved;
badgesData.value = formatFilterBadges(filtersSaved, columnsConfig.value);
hookGetData();
});

columnsConfig.value = getColumns(props.listId);
});
Expand Down
14 changes: 14 additions & 0 deletions resources/jscomposition/cases/casesMain/api/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -561,3 +561,17 @@ export const getCounters = async (data) => {

return response.data;
};

export const saveCaseFilters = async (data, status = "") => {
const type = status !== "" ? `|$${status}` : "";
const response = await api.put(`/users/store_filter_configuration/casesFilter${type}`, data);

return response.data;
};

export const getCaseFilters = async (status = "") => {
const type = status !== "" ? `|$${status}` : "";
const response = await api.get(`/users/get_filter_configuration/casesFilter${type}`);

return response.data;
};
46 changes: 46 additions & 0 deletions resources/jscomposition/cases/casesMain/utils/filters.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { formatDate } from "../../../utils";
export const formatFilters = (filters) => {
const response = filters.map((element) => {
let { value } = element;
let label = "";

if (!element.operator) {
return null;
Expand All @@ -15,6 +16,7 @@ export const formatFilters = (filters) => {
// Case status is a dropdown filter, using for the API
if (element.field === "case_status") {
value = element.value.value;
label = element.value.label;
}

return {
Expand All @@ -24,12 +26,56 @@ export const formatFilters = (filters) => {
},
operator: element.operator,
value: value || "",
label,
_column_field: element.field,
};
});

return response.filter((e) => e);
};

export const getFilterOrder = (filters) => {
let response = {};
filters.forEach((element) => {
if (element.sortable) {
response = {
by: element.field,
direction: element.sortable,
};
}
});
return response;
};

export const formattedFilter = (filters) => {
const response = formatFilters(filters);
const order = getFilterOrder(filters);
return {
filters: [...response],
order,
};
};

export const formatFilterSaved = (filters) => {
const response = filters.map((element) => {
let value = "";
if (element.subject.value === "case_status") {
value = {
value: element.value,
label: element.label,
};
} else {
value = element.value;
}
return {
field: element.subject.value,
operator: element.operator,
value,
};
});
return response.filter((e) => e);
};

// Format filters to convert in badges data
export const formatFilterBadges = (filters, columns) => {
const response = filters.map((element) => {
Expand Down
Loading