-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js.map
1 lines (1 loc) · 19.5 KB
/
index.js.map
1
{"version":3,"sources":["../src/index.tsx","../src/dataProvider.ts","../src/helpers/auth.ts","../src/helpers/normalize.ts","../src/hooks/index.tsx"],"sourcesContent":["export * from \"./dataProvider\";\r\nexport * from \"./helpers\";\r\nexport * from \"./hooks\";","import axios, { AxiosInstance } from \"axios\";\r\nimport {\r\n IDataContextProvider as IDataProvider,\r\n HttpError,\r\n CrudFilters,\r\n CrudSorting,\r\n CrudOperators,\r\n BaseKey,\r\n} from \"../src/interfaces/data\";\r\nimport { stringify, parse } from \"qs\";\r\n\r\nconst axiosInstance = axios.create();\r\n\r\naxiosInstance.interceptors.response.use(\r\n (response) => {\r\n return response;\r\n },\r\n (error) => {\r\n const customError: HttpError = {\r\n ...error,\r\n message: error.response?.data?.message,\r\n statusCode: error.response?.status,\r\n };\r\n\r\n return Promise.reject(customError);\r\n },\r\n);\r\n\r\nconst mapOperator = (operator: CrudOperators) => {\r\n switch (operator) {\r\n case \"nin\":\r\n return \"notIn\";\r\n case \"ncontains\":\r\n return \"notContains\";\r\n case \"containss\":\r\n return \"containsi\";\r\n case \"ncontainss\":\r\n return \"notContainsi\";\r\n }\r\n\r\n return operator;\r\n};\r\n\r\nconst generateSort = (sort?: CrudSorting) => {\r\n const _sort: string[] = [];\r\n\r\n if (sort) {\r\n sort.map((item) => {\r\n if (item.order) {\r\n _sort.push(`${item.field}:${item.order}`);\r\n }\r\n });\r\n }\r\n\r\n return _sort;\r\n};\r\n\r\nconst generateFilter = (filters?: CrudFilters) => {\r\n let rawQuery = \"\";\r\n\r\n if (filters) {\r\n filters.map((filter) => {\r\n if (filter.operator !== \"or\") {\r\n const { field, operator, value } = filter;\r\n\r\n const mapedOperator = mapOperator(operator);\r\n\r\n if (Array.isArray(value)) {\r\n value.map((val, index) => {\r\n rawQuery += `&filters[${field}][$${mapedOperator}][${index}]=${val}`;\r\n });\r\n } else {\r\n rawQuery += `&filters[${field}][$${mapedOperator}]=${value}`;\r\n }\r\n } else {\r\n const { value } = filter;\r\n\r\n value.map((item, index) => {\r\n const { field, operator, value } = item;\r\n\r\n const mapedOperator = mapOperator(operator);\r\n\r\n rawQuery += `&filters[$or][${index}][${field}][$${mapedOperator}]=${value}`;\r\n });\r\n }\r\n });\r\n }\r\n\r\n const parsedQuery = parse(rawQuery);\r\n const queryFilters = stringify(parsedQuery, { encodeValuesOnly: true });\r\n\r\n return queryFilters;\r\n};\r\n\r\nconst normalizeData = (data: any): any => {\r\n const isObject = (data: any) =>\r\n Object.prototype.toString.call(data) === \"[object Object]\";\r\n\r\n const flatten = (data: any) => {\r\n if (!data.attributes) return data;\r\n\r\n return {\r\n id: data.id,\r\n ...data.attributes,\r\n };\r\n };\r\n\r\n if (Array.isArray(data)) {\r\n return data.map((item) => normalizeData(item));\r\n }\r\n\r\n if (isObject(data)) {\r\n if (Array.isArray(data.data)) {\r\n data = [...data.data];\r\n } else if (isObject(data.data)) {\r\n data = flatten({ ...data.data });\r\n } else if (data.data === null) {\r\n data = null;\r\n } else {\r\n data = flatten(data);\r\n }\r\n\r\n for (const key in data) {\r\n data[key] = normalizeData(data[key]);\r\n }\r\n\r\n return data;\r\n }\r\n\r\n return data;\r\n};\r\n\r\nexport const DataProvider = (\r\n apiUrl: string,\r\n httpClient: AxiosInstance = axiosInstance,\r\n): IDataProvider => ({\r\n getList: async ({ resource, pagination, filters, sort, metaData }) => {\r\n const url = `${apiUrl}/${resource}`;\r\n\r\n const current = pagination?.current || 1;\r\n const pageSize = pagination?.pageSize || 10;\r\n const locale = metaData?.locale;\r\n const fields = metaData?.fields;\r\n const populate = metaData?.populate;\r\n const publicationState = metaData?.publicationState;\r\n\r\n const quertSorters = generateSort(sort);\r\n const queryFilters = generateFilter(filters);\r\n\r\n const query = {\r\n \"pagination[page]\": current,\r\n \"pagination[pageSize]\": pageSize,\r\n locale,\r\n publicationState,\r\n fields,\r\n populate,\r\n sort: quertSorters.length > 0 ? quertSorters.join(\",\") : undefined,\r\n };\r\n\r\n const { data } = await httpClient.get(\r\n `${url}?${stringify(query, {\r\n encodeValuesOnly: true,\r\n })}&${queryFilters}`,\r\n );\r\n\r\n return {\r\n data: normalizeData(data),\r\n total: data.meta.pagination.total,\r\n };\r\n },\r\n\r\n getMany: async ({ resource, ids }) => {\r\n const url = `${apiUrl}/${resource}`;\r\n\r\n const query = ids\r\n .map((item: BaseKey) => `filters[id][$in]=${item}`)\r\n .join(\"&\");\r\n\r\n const { data } = await httpClient.get(`${url}?${query}`);\r\n\r\n return {\r\n data: normalizeData(data),\r\n };\r\n },\r\n\r\n create: async ({ resource, variables }) => {\r\n const url = `${apiUrl}/${resource}`;\r\n\r\n let dataVariables: any = { data: variables };\r\n\r\n if (resource === \"users\") {\r\n dataVariables = variables;\r\n }\r\n\r\n const { data } = await httpClient.post(url, dataVariables);\r\n return {\r\n data,\r\n };\r\n },\r\n\r\n update: async ({ resource, id, variables }) => {\r\n const url = `${apiUrl}/${resource}/${id}`;\r\n\r\n let dataVariables: any = { data: variables };\r\n\r\n if (resource === \"users\") {\r\n dataVariables = variables;\r\n }\r\n\r\n const { data } = await httpClient.put(url, dataVariables);\r\n return {\r\n data,\r\n };\r\n },\r\n\r\n updateMany: async ({ resource, ids, variables }) => {\r\n const response = await Promise.all(\r\n ids.map(async (id) => {\r\n const url = `${apiUrl}/${resource}/${id}`;\r\n\r\n let dataVariables: any = { data: variables };\r\n\r\n if (resource === \"users\") {\r\n dataVariables = variables;\r\n }\r\n const { data } = await httpClient.put(url, dataVariables);\r\n return data;\r\n }),\r\n );\r\n\r\n return { data: response };\r\n },\r\n\r\n createMany: async ({ resource, variables }) => {\r\n const response = await Promise.all(\r\n variables.map(async (param) => {\r\n const { data } = await httpClient.post(\r\n `${apiUrl}/${resource}`,\r\n {\r\n data: param,\r\n },\r\n );\r\n return data;\r\n }),\r\n );\r\n\r\n return { data: response };\r\n },\r\n\r\n getOne: async ({ resource, id, metaData }) => {\r\n const locale = metaData?.locale;\r\n const fields = metaData?.fields;\r\n const populate = metaData?.populate;\r\n\r\n const query = {\r\n locale,\r\n fields,\r\n populate,\r\n };\r\n\r\n const url = `${apiUrl}/${resource}/${id}?${stringify(query, {\r\n encode: false,\r\n })}`;\r\n\r\n const { data } = await httpClient.get(url);\r\n\r\n return {\r\n data: normalizeData(data),\r\n };\r\n },\r\n\r\n deleteOne: async ({ resource, id }) => {\r\n const url = `${apiUrl}/${resource}/${id}`;\r\n\r\n const { data } = await httpClient.delete(url);\r\n\r\n return {\r\n data,\r\n };\r\n },\r\n\r\n deleteMany: async ({ resource, ids }) => {\r\n const response = await Promise.all(\r\n ids.map(async (id) => {\r\n const { data } = await httpClient.delete(\r\n `${apiUrl}/${resource}/${id}`,\r\n );\r\n return data;\r\n }),\r\n );\r\n return { data: response };\r\n },\r\n\r\n getApiUrl: () => {\r\n return apiUrl;\r\n },\r\n\r\n custom: async ({ url, method, filters, sort, payload, query, headers }) => {\r\n let requestUrl = `${url}?`;\r\n\r\n if (sort) {\r\n const sortQuery = generateSort(sort);\r\n if (sortQuery.length > 0) {\r\n requestUrl = `${requestUrl}&${stringify({\r\n sort: sortQuery.join(\",\"),\r\n })}`;\r\n }\r\n }\r\n\r\n if (filters) {\r\n const filterQuery = generateFilter(filters);\r\n requestUrl = `${requestUrl}&${filterQuery}`;\r\n }\r\n\r\n if (query) {\r\n requestUrl = `${requestUrl}&${stringify(query)}`;\r\n }\r\n\r\n if (headers) {\r\n httpClient.defaults.headers = {\r\n ...httpClient.defaults.headers,\r\n ...headers,\r\n };\r\n }\r\n\r\n let axiosResponse;\r\n switch (method) {\r\n case \"put\":\r\n case \"post\":\r\n case \"patch\":\r\n axiosResponse = await httpClient[method](url, payload);\r\n break;\r\n case \"delete\":\r\n axiosResponse = await httpClient.delete(url);\r\n break;\r\n default:\r\n axiosResponse = await httpClient.get(requestUrl);\r\n break;\r\n }\r\n\r\n const { data } = axiosResponse;\r\n\r\n return Promise.resolve({ data });\r\n },\r\n});","import axios from \"axios\";\r\n\r\ninterface ILoginResponse {\r\n jwt: string;\r\n user: IUser;\r\n}\r\n\r\ninterface IRole {\r\n id: number | string;\r\n name: string;\r\n description: string;\r\n type: string;\r\n}\r\n\r\ninterface IUser {\r\n id: number | string;\r\n username: string;\r\n email: string;\r\n provider: string;\r\n confirmed: boolean;\r\n blocked: boolean;\r\n role: IRole;\r\n created_at: string;\r\n updated_at: string;\r\n}\r\n\r\nexport const AuthHelper = (apiUrl: string) => ({\r\n login: async (identifier: string, password: string) => {\r\n const url = `${apiUrl}/auth/local`;\r\n\r\n return await axios.post<ILoginResponse>(url, {\r\n identifier,\r\n password,\r\n });\r\n },\r\n me: async (token: string) => {\r\n return await axios.get<IUser>(`${apiUrl}/users/me`, {\r\n headers: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n });\r\n },\r\n});","export const getValueProps = (data: any, imageUrl: string) => {\r\n if (!data) {\r\n return { fileList: [] };\r\n }\r\n\r\n return {\r\n file: data.file,\r\n fileList:\r\n data.fileList ??\r\n (Array.isArray(data) ? data : [...data]).map((item: any) => {\r\n const file: any = {\r\n name: item.name,\r\n percent: item.percent,\r\n size: item.size,\r\n status: item.status,\r\n type: item.mime || item.type,\r\n uid: item.id,\r\n };\r\n\r\n if (item.url) {\r\n file.url = `${imageUrl}${item.url}`;\r\n }\r\n\r\n return file;\r\n }),\r\n };\r\n};\r\n\r\nexport const mediaUploadMapper = (params: any) => {\r\n Object.keys(params).map((item) => {\r\n if (params[item]) {\r\n const param = params[item].fileList;\r\n const isMediaField = Array.isArray(param);\r\n if (isMediaField) {\r\n const ids = [];\r\n for (const item of param) {\r\n if (item.response) {\r\n for (const response of item.response) {\r\n ids.push(response.id);\r\n }\r\n } else {\r\n ids.push(item.uid);\r\n }\r\n }\r\n params[item] = ids;\r\n }\r\n }\r\n });\r\n return params;\r\n};","import { useState } from \"react\";\r\n\r\ninterface StrapiUploadParams {\r\n maxCount: number;\r\n}\r\n\r\ntype UseStrapiUploadType = {\r\n (uploadParams: StrapiUploadParams): {\r\n uploadedFileIds: string[];\r\n beforeUpload: (_file: any, files: any[]) => boolean;\r\n fileList: any[];\r\n maxCount: number;\r\n };\r\n};\r\n\r\n// TODO: discuss with team\r\nexport const useStrapiUpload: UseStrapiUploadType = ({ maxCount }) => {\r\n const [uploadedFileIds] = useState<string[]>([]);\r\n const [fileList, setFileList] = useState<any[]>([]);\r\n\r\n const beforeUpload = (_file: any, files: any[]): boolean => {\r\n const totalFiles = fileList.length;\r\n const filesCount = files.length;\r\n\r\n if (totalFiles + filesCount > maxCount) {\r\n const excessFileCount = totalFiles + filesCount - maxCount;\r\n // convert negative\r\n const deleteItemCount = excessFileCount - excessFileCount * 2;\r\n files.splice(deleteItemCount);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n setFileList([...fileList, ...files]);\r\n\r\n return true;\r\n };\r\n\r\n return {\r\n uploadedFileIds,\r\n beforeUpload,\r\n fileList,\r\n maxCount,\r\n };\r\n};"],"mappings":"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","names":[]}