Skip to content

Commit

Permalink
feat: added firestoreEnumArray()
Browse files Browse the repository at this point in the history
  • Loading branch information
dereekb committed Jun 9, 2022
1 parent 28e6704 commit 5f9e1b1
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ISO8601DateString, Maybe, modelFieldMapFunctions, objectHasKey } from '@dereekb/util';
import { isValid } from 'date-fns';
import { FirestoreModelKeyGrantedRoleArrayMap } from '../collection';
import { firestoreArrayMap, firestoreDate, firestoreEncodedArray, firestoreEnum, firestoreField, firestoreMap, firestoreModelKeyGrantedRoleArrayMap, firestoreUniqueKeyedArray, firestoreUniqueStringArray } from './snapshot.field';
import { firestoreArrayMap, firestoreDate, firestoreEncodedArray, firestoreEnum, firestoreField, firestoreMap, firestoreModelKeyGrantedRoleArrayMap, firestoreEnumArray, firestoreUniqueKeyedArray, firestoreUniqueStringArray } from './snapshot.field';

describe('firestoreField()', () => {
const defaultValue = -1;
Expand Down Expand Up @@ -104,6 +104,17 @@ describe('firestoreUniqueKeyedArray()', () => {
});
});

describe('firestoreEnumArray()', () => {
const uniqueKeyedArrayConfig = firestoreEnumArray<TestFirestoreEnumType>();

it('should filter out duplicate keyed data.', () => {
const data: TestFirestoreEnumType[] = ['a', 'b', 'b'];

const results = uniqueKeyedArrayConfig.from.convert(data);
expect(results.length).toBe(2);
});
});

describe('firestoreUniqueStringArray()', () => {
const uniqueStringArrayConfig = firestoreUniqueStringArray({
toLowercase: true
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,32 @@
import { GrantedRole } from '@dereekb/model';
import { FirestoreModelKey } from '../collection/collection';
import { nowISODateString, toISODateString, toJsDate } from '@dereekb/date';
import { ModelFieldMapFunctionsConfig, GetterOrValue, Maybe, ModelFieldMapConvertFunction, passThrough, PrimativeKey, ReadKeyFunction, makeFindUniqueFunction, ModelFieldMapFunctionsWithDefaultsConfig, filterMaybeValues, MaybeSo, FindUniqueFunction, FindUniqueStringsTransformConfig, findUniqueTransform, MapFunction, FilterKeyValueTuplesInput, KeyValueTypleValueFilter, filterFromPOJOFunction, copyObject, CopyObjectFunction, mapObjectMapFunction, filterEmptyValues, ModelKey } from '@dereekb/util';
import {
ModelFieldMapFunctionsConfig,
GetterOrValue,
Maybe,
ModelFieldMapConvertFunction,
passThrough,
PrimativeKey,
ReadKeyFunction,
makeFindUniqueFunction,
ModelFieldMapFunctionsWithDefaultsConfig,
filterMaybeValues,
MaybeSo,
FindUniqueFunction,
FindUniqueStringsTransformConfig,
findUniqueTransform,
MapFunction,
FilterKeyValueTuplesInput,
KeyValueTypleValueFilter,
filterFromPOJOFunction,
copyObject,
CopyObjectFunction,
mapObjectMapFunction,
filterEmptyValues,
ModelKey,
unique
} from '@dereekb/util';
import { FIRESTORE_EMPTY_VALUE } from './snapshot';

export interface BaseFirestoreFieldConfig<V, D = unknown> {
Expand Down Expand Up @@ -194,6 +219,21 @@ export function firestoreUniqueKeyedArray<T, K extends PrimativeKey = PrimativeK
});
}

export type FirestoreEnumArrayFieldConfig<S extends string | number> = Omit<FirestoreUniqueArrayFieldConfig<S>, 'findUnique'>;

/**
* FirestoreField configuration for an array of unique enum values.
*
* @param config
* @returns
*/
export function firestoreEnumArray<S extends string | number>(config: FirestoreEnumArrayFieldConfig<S> = {}) {
return firestoreUniqueArray({
...config,
findUnique: unique
});
}

export type FirestoreUniqueStringArrayFieldConfig = Omit<FirestoreUniqueArrayFieldConfig<string>, 'findUnique'> & FindUniqueStringsTransformConfig;

export function firestoreUniqueStringArray(config: FirestoreUniqueStringArrayFieldConfig) {
Expand Down

0 comments on commit 5f9e1b1

Please sign in to comment.