/**
 * <%= pascalCase(singularDomainName) %> Utils
 */
import {createEntityAdapter, EntityAdapter} from '@ngrx/entity';
import {getPropertyValue, hasNoItems, isPropertyDefined} from '@zionapps/core';
import {<%= pascalCase(singularDomainName) %>} from './<%= paramCase(pluralDomainName) %>.domain';

export const canSave<%= pascalCase(singularDomainName) %> = (item: <%= pascalCase(singularDomainName) %>): boolean => isPropertyDefined(item, 'id');

export const canSave<%= pascalCase(singularDomainName) %>List = (list: <%= pascalCase(singularDomainName) %>[]): boolean => {
  if (hasNoItems(list)) {
    return false;
  }
  return list.reduce((wasValid, item): boolean => canSave<%= pascalCase(singularDomainName) %>(item) ? wasValid : false, true);
};

export const get<%= pascalCase(singularDomainName) %>ById = (item: <%= pascalCase(singularDomainName) %>): number => getPropertyValue(item, 'id', null);

export const sort<%= pascalCase(singularDomainName) %>ByDate = (a: <%= pascalCase(singularDomainName) %>, b: <%= pascalCase(singularDomainName) %>): number => {
  return getPropertyValue(a, 'createdDateTime', 0) > getPropertyValue(b, 'createdDateTime', 0) ? -1 : 1;
};

export const <%= camelCase(pluralDomainName) %>Adapter: EntityAdapter<<%= pascalCase(singularDomainName) %>> = createEntityAdapter<<%= pascalCase(singularDomainName) %>>({
  selectId: get<%= pascalCase(singularDomainName) %>ById,
  sortComparer: sort<%= pascalCase(singularDomainName) %>ByDate,
});
