import { get } from '@/lib/api/core';
import { convertSnakeToCamel } from '@/utils/convert-snake-to-camel';
import { getQueryString } from '@/utils/core';
import { toThrowResponseError } from '@/utils/mappers/response-mapper';
interface SkillResponse {
skill_type: string;
skill_names: string[];
}
export const getSkills = async (sortByType = true) => {
try {
const query = getQueryString({ sort_by_type: sortByType });
const response = await get<SkillResponse[]>(`/skills${query}`);
return convertSnakeToCamel(response);
} catch (e: FetchBackendError) {
return toThrowResponseError();
}
};
export const isObject = (object: unknown): object is Object =>
!!object && typeof object === 'object';
#How to fix this type i need automatically convert parse dynamic type (T) to camelcase version
2 messages · Page 1 of 1 (latest)
const toCamelCase = (s: string) =>
s.replace(/[-_](.)/g, (_, c) => c.toUpperCase());
const toSnakeCase = (s: string) =>
s.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
export const convertSnakeToCamel = <T>(obj: T): KeysToCamelCase<T> => {
if (!isObject(obj)) return obj as KeysToCamelCase<T>;
if (Array.isArray(obj)) {
return obj.map((item) =>
convertSnakeToCamel(item),
) as unknown as KeysToCamelCase<T>;
}
const newObject: Record<string, unknown> = {};
Object.keys(obj).forEach((key) => {
const camelCaseKey = toCamelCase(key);
newObject[camelCaseKey] = convertSnakeToCamel(
(obj as Record<string, unknown>)[key],
);
});
return newObject as KeysToCamelCase<T>;
};
export const convertCamelToSnake = <T>(obj: T): KeysToSnakeCase<T> => {
if (!isObject(obj)) return obj as KeysToSnakeCase<T>;
if (Array.isArray(obj)) {
return obj.map((item) =>
convertCamelToSnake(item),
) as unknown as KeysToSnakeCase<T>;
}
const newObject: Record<string, unknown> = {};
Object.keys(obj).forEach((key) => {
const snakeCaseKey = toSnakeCase(key);
newObject[snakeCaseKey] = convertCamelToSnake(
(obj as Record<string, unknown>)[key],
);
});
return newObject as KeysToSnakeCase<T>;
};