@proscom/ui-utils
Advanced tools
Comparing version 0.1.0 to 0.1.1
@@ -13,1 +13,87 @@ export declare type EnumValueInfo = { | ||
}; | ||
/** | ||
* Набор утилит для работы с энумами (перечислениями). | ||
* Решает частые задачи, такие как формирование массивов опций для селектов, | ||
* поиск ключа по имени. | ||
* | ||
* @example | ||
* enum RoomType { | ||
* Corridor = 'corridor'; | ||
* Class = 'class'; | ||
* Restroom = 'restroom'; | ||
* } | ||
* | ||
* // Надо явно указать аргументы дженерика, потому что TS (v4.1) недостаточно умён | ||
* const roomType = new EnumHelpers<typeof RoomType, { name: string, order: number }>( | ||
* RoomType, | ||
* { | ||
* [RoomType.Corridor]: { name: 'Коридор', order: 1 }, | ||
* [RoomType.Class]: { name: 'Аудитория', order: 2 }, | ||
* [RoomType.Restroom]: { name: 'Комната отдыха', order: 3 } | ||
* } | ||
* ); | ||
* | ||
* const roomTypes = roomType.getOptions().sort((a,b) => a.order - b.order); | ||
*/ | ||
export declare class EnumHelpers<ValueType extends StringEnum, ValueInfo extends EnumValueInfo> { | ||
values: ValueType; | ||
info: { | ||
[key in EnumKey<ValueType>]: ValueInfo; | ||
}; | ||
/** | ||
* Конструктор | ||
* @param values - энум (enum), содержащее только ключи | ||
* @param info - дополнительные данные, на каждый ключ энума | ||
* содержит объект, в том числе содержащий имя в поле name | ||
*/ | ||
constructor(values: ValueType, info: { | ||
[key in EnumKey<ValueType>]: ValueInfo; | ||
}); | ||
/** | ||
* Возвращает массив ключей энума | ||
*/ | ||
keys(): EnumKey<ValueType>[]; | ||
/** | ||
* Возвращает массив опций энума. | ||
* Подходит для селектов, табов и т.п. | ||
*/ | ||
getOptions(): Array<{ | ||
label: string; | ||
value: EnumKey<ValueType>; | ||
}>; | ||
/** | ||
* Возвращает массив опций энума. | ||
* Подходит для селектов, табов и т.п. | ||
* | ||
* @field - поле, которое возвращается в качестве label | ||
*/ | ||
getOptions<Field extends keyof ValueInfo>(field: Field): Array<{ | ||
label: ValueInfo[Field]; | ||
value: EnumKey<ValueType>; | ||
}>; | ||
/** | ||
* Возвращает массив опций энума. | ||
* Подходит для селектов, табов и т.п. | ||
* | ||
* @field - поле, которое возвращается в качестве label | ||
* @labelKey - ключ, в который записывается label | ||
* @valueKey - ключ, в который записывается ключ энума | ||
*/ | ||
getOptions<Field extends keyof ValueInfo, Label extends string, Value extends string>(field: Field, labelKey: Label, valueKey: Value): Array<Option<ValueInfo[Field], EnumKey<ValueType>, Label, Value>>; | ||
/** | ||
* Возвращает имя по ключу | ||
* @param value - ключ энума | ||
*/ | ||
getName(value: EnumKey<ValueType>): string | undefined; | ||
/** | ||
* Возвращает ключ по имени | ||
* @param name - имя | ||
*/ | ||
getByName(name: string): EnumKey<ValueType> | undefined; | ||
/** | ||
* Возвращает ключ по произвольному значению | ||
* @param value - имя | ||
* @param field - поле, с которым сравнивается значение | ||
*/ | ||
getBy<Field extends keyof ValueInfo>(value: string, field: Field): EnumKey<ValueType> | undefined; | ||
} |
@@ -5,2 +5,21 @@ /** | ||
* поиск ключа по имени. | ||
* | ||
* @example | ||
* enum RoomType { | ||
* Corridor = 'corridor'; | ||
* Class = 'class'; | ||
* Restroom = 'restroom'; | ||
* } | ||
* | ||
* // Надо явно указать аргументы дженерика, потому что TS (v4.1) недостаточно умён | ||
* const roomType = new EnumHelpers<typeof RoomType, { name: string, order: number }>( | ||
* RoomType, | ||
* { | ||
* [RoomType.Corridor]: { name: 'Коридор', order: 1 }, | ||
* [RoomType.Class]: { name: 'Аудитория', order: 2 }, | ||
* [RoomType.Restroom]: { name: 'Комната отдыха', order: 3 } | ||
* } | ||
* ); | ||
* | ||
* const roomTypes = roomType.getOptions().sort((a,b) => a.order - b.order); | ||
*/ | ||
@@ -82,3 +101,3 @@ var EnumHelpers = /** @class */ (function () { | ||
}()); | ||
export {}; | ||
export { EnumHelpers }; | ||
//# sourceMappingURL=EnumHelpers.js.map |
@@ -10,2 +10,12 @@ /** | ||
/** | ||
* Парсит значение из адресной строки | ||
* @param query - значение из адресной строки | ||
*/ | ||
export declare function parseQuerySimple<T>(query: T): T | undefined; | ||
/** | ||
* Преобразует значение в строку для записи в адресную строку | ||
* @param data - преобразуемое значение | ||
*/ | ||
export declare function stringifyQuerySimple<T>(data: T): string | undefined; | ||
/** | ||
* Парсит массив, сохраненный в адресной строке через запятую | ||
@@ -12,0 +22,0 @@ * @param query - значение из адресной строки |
@@ -26,2 +26,16 @@ /** | ||
} | ||
/** | ||
* Парсит значение из адресной строки | ||
* @param query - значение из адресной строки | ||
*/ | ||
export function parseQuerySimple(query) { | ||
return query || undefined; | ||
} | ||
/** | ||
* Преобразует значение в строку для записи в адресную строку | ||
* @param data - преобразуемое значение | ||
*/ | ||
export function stringifyQuerySimple(data) { | ||
return data ? String(data) : undefined; | ||
} | ||
export function parseQueryArray(query) { | ||
@@ -28,0 +42,0 @@ return query ? query.split(',') : null; |
@@ -13,1 +13,87 @@ export declare type EnumValueInfo = { | ||
}; | ||
/** | ||
* Набор утилит для работы с энумами (перечислениями). | ||
* Решает частые задачи, такие как формирование массивов опций для селектов, | ||
* поиск ключа по имени. | ||
* | ||
* @example | ||
* enum RoomType { | ||
* Corridor = 'corridor'; | ||
* Class = 'class'; | ||
* Restroom = 'restroom'; | ||
* } | ||
* | ||
* // Надо явно указать аргументы дженерика, потому что TS (v4.1) недостаточно умён | ||
* const roomType = new EnumHelpers<typeof RoomType, { name: string, order: number }>( | ||
* RoomType, | ||
* { | ||
* [RoomType.Corridor]: { name: 'Коридор', order: 1 }, | ||
* [RoomType.Class]: { name: 'Аудитория', order: 2 }, | ||
* [RoomType.Restroom]: { name: 'Комната отдыха', order: 3 } | ||
* } | ||
* ); | ||
* | ||
* const roomTypes = roomType.getOptions().sort((a,b) => a.order - b.order); | ||
*/ | ||
export declare class EnumHelpers<ValueType extends StringEnum, ValueInfo extends EnumValueInfo> { | ||
values: ValueType; | ||
info: { | ||
[key in EnumKey<ValueType>]: ValueInfo; | ||
}; | ||
/** | ||
* Конструктор | ||
* @param values - энум (enum), содержащее только ключи | ||
* @param info - дополнительные данные, на каждый ключ энума | ||
* содержит объект, в том числе содержащий имя в поле name | ||
*/ | ||
constructor(values: ValueType, info: { | ||
[key in EnumKey<ValueType>]: ValueInfo; | ||
}); | ||
/** | ||
* Возвращает массив ключей энума | ||
*/ | ||
keys(): EnumKey<ValueType>[]; | ||
/** | ||
* Возвращает массив опций энума. | ||
* Подходит для селектов, табов и т.п. | ||
*/ | ||
getOptions(): Array<{ | ||
label: string; | ||
value: EnumKey<ValueType>; | ||
}>; | ||
/** | ||
* Возвращает массив опций энума. | ||
* Подходит для селектов, табов и т.п. | ||
* | ||
* @field - поле, которое возвращается в качестве label | ||
*/ | ||
getOptions<Field extends keyof ValueInfo>(field: Field): Array<{ | ||
label: ValueInfo[Field]; | ||
value: EnumKey<ValueType>; | ||
}>; | ||
/** | ||
* Возвращает массив опций энума. | ||
* Подходит для селектов, табов и т.п. | ||
* | ||
* @field - поле, которое возвращается в качестве label | ||
* @labelKey - ключ, в который записывается label | ||
* @valueKey - ключ, в который записывается ключ энума | ||
*/ | ||
getOptions<Field extends keyof ValueInfo, Label extends string, Value extends string>(field: Field, labelKey: Label, valueKey: Value): Array<Option<ValueInfo[Field], EnumKey<ValueType>, Label, Value>>; | ||
/** | ||
* Возвращает имя по ключу | ||
* @param value - ключ энума | ||
*/ | ||
getName(value: EnumKey<ValueType>): string | undefined; | ||
/** | ||
* Возвращает ключ по имени | ||
* @param name - имя | ||
*/ | ||
getByName(name: string): EnumKey<ValueType> | undefined; | ||
/** | ||
* Возвращает ключ по произвольному значению | ||
* @param value - имя | ||
* @param field - поле, с которым сравнивается значение | ||
*/ | ||
getBy<Field extends keyof ValueInfo>(value: string, field: Field): EnumKey<ValueType> | undefined; | ||
} |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.EnumHelpers = void 0; | ||
/** | ||
@@ -7,2 +8,21 @@ * Набор утилит для работы с энумами (перечислениями). | ||
* поиск ключа по имени. | ||
* | ||
* @example | ||
* enum RoomType { | ||
* Corridor = 'corridor'; | ||
* Class = 'class'; | ||
* Restroom = 'restroom'; | ||
* } | ||
* | ||
* // Надо явно указать аргументы дженерика, потому что TS (v4.1) недостаточно умён | ||
* const roomType = new EnumHelpers<typeof RoomType, { name: string, order: number }>( | ||
* RoomType, | ||
* { | ||
* [RoomType.Corridor]: { name: 'Коридор', order: 1 }, | ||
* [RoomType.Class]: { name: 'Аудитория', order: 2 }, | ||
* [RoomType.Restroom]: { name: 'Комната отдыха', order: 3 } | ||
* } | ||
* ); | ||
* | ||
* const roomTypes = roomType.getOptions().sort((a,b) => a.order - b.order); | ||
*/ | ||
@@ -84,2 +104,3 @@ var EnumHelpers = /** @class */ (function () { | ||
}()); | ||
exports.EnumHelpers = EnumHelpers; | ||
//# sourceMappingURL=EnumHelpers.js.map |
@@ -10,2 +10,12 @@ /** | ||
/** | ||
* Парсит значение из адресной строки | ||
* @param query - значение из адресной строки | ||
*/ | ||
export declare function parseQuerySimple<T>(query: T): T | undefined; | ||
/** | ||
* Преобразует значение в строку для записи в адресную строку | ||
* @param data - преобразуемое значение | ||
*/ | ||
export declare function stringifyQuerySimple<T>(data: T): string | undefined; | ||
/** | ||
* Парсит массив, сохраненный в адресной строке через запятую | ||
@@ -12,0 +22,0 @@ * @param query - значение из адресной строки |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.encodeQueryArray = exports.parseQueryArray = exports.getParentUrl = void 0; | ||
exports.encodeQueryArray = exports.parseQueryArray = exports.stringifyQuerySimple = exports.parseQuerySimple = exports.getParentUrl = void 0; | ||
/** | ||
@@ -30,2 +30,18 @@ * Рассчитывает родительский адрес, убирая нужное число элементов справа | ||
exports.getParentUrl = getParentUrl; | ||
/** | ||
* Парсит значение из адресной строки | ||
* @param query - значение из адресной строки | ||
*/ | ||
function parseQuerySimple(query) { | ||
return query || undefined; | ||
} | ||
exports.parseQuerySimple = parseQuerySimple; | ||
/** | ||
* Преобразует значение в строку для записи в адресную строку | ||
* @param data - преобразуемое значение | ||
*/ | ||
function stringifyQuerySimple(data) { | ||
return data ? String(data) : undefined; | ||
} | ||
exports.stringifyQuerySimple = stringifyQuerySimple; | ||
function parseQueryArray(query) { | ||
@@ -32,0 +48,0 @@ return query ? query.split(',') : null; |
{ | ||
"name": "@proscom/ui-utils", | ||
"version": "0.1.0", | ||
"version": "0.1.1", | ||
"description": "Proscom UI utilities", | ||
@@ -35,3 +35,3 @@ "author": "Andrew Starostin <a.starostin@proscom.ru>", | ||
}, | ||
"gitHead": "7074c048ebb57b3a756bd8577bb270eb73998a66" | ||
"gitHead": "47d95ea14365f12657f3625a55fbd22d81c76d7e" | ||
} |
@@ -27,4 +27,23 @@ export type EnumValueInfo = { | ||
* поиск ключа по имени. | ||
* | ||
* @example | ||
* enum RoomType { | ||
* Corridor = 'corridor'; | ||
* Class = 'class'; | ||
* Restroom = 'restroom'; | ||
* } | ||
* | ||
* // Надо явно указать аргументы дженерика, потому что TS (v4.1) недостаточно умён | ||
* const roomType = new EnumHelpers<typeof RoomType, { name: string, order: number }>( | ||
* RoomType, | ||
* { | ||
* [RoomType.Corridor]: { name: 'Коридор', order: 1 }, | ||
* [RoomType.Class]: { name: 'Аудитория', order: 2 }, | ||
* [RoomType.Restroom]: { name: 'Комната отдыха', order: 3 } | ||
* } | ||
* ); | ||
* | ||
* const roomTypes = roomType.getOptions().sort((a,b) => a.order - b.order); | ||
*/ | ||
class EnumHelpers< | ||
export class EnumHelpers< | ||
ValueType extends StringEnum, | ||
@@ -31,0 +50,0 @@ ValueInfo extends EnumValueInfo |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
203683
3800