All files / src/apps/dictionaries types.ts

22.22% Statements 2/9
0% Branches 0/6
0% Functions 0/2
25% Lines 2/8

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117                                                                                                                                                                        1x                                   1x                            
import {
  BaseConceptContainer,
  EditableConceptContainerFields,
  Extras,
  Version
} from "../../utils";
import { pick } from "lodash";
 
interface BaseDictionary extends BaseConceptContainer {
  preferred_source: string;
  extras?: { source?: string } | Omit<Extras, "source">;
}
 
export interface Dictionary extends BaseDictionary {
  supported_locales: string[];
  owner_url: string;
  owner?: string;
}
 
interface BaseAPIDictionary extends BaseDictionary {
  id: string;
  external_id: string;
  full_name: string;
  website: string;
  custom_validation_schema: string;
  extras: { source: string } | Omit<Extras, "source">;
}
 
export interface NewAPIDictionary extends BaseAPIDictionary {
  supported_locales: string;
  collection_type: string;
}
 
export interface APIDictionary extends BaseAPIDictionary {
  supported_locales: string[];
  short_code: string;
  owner: string;
  owner_type: string;
  owner_url: string;
  url: string;
  active_concepts: string;
  references: { [key: string]: string }[];
  concepts_url: string;
}
 
export interface DictionaryState {
  newDictionary?: APIDictionary;
  editedDictionary?: APIDictionary;
  dictionary?: APIDictionary;
  dictionaries: { items: APIDictionary[]; responseMeta?: {} }[];
  versions: APIDictionaryVersion[];
  addReferencesResults: { payload: {}; meta: [] }[];
  showOnlyVerified: boolean;
}
 
export interface EditableDictionaryFields
  extends EditableConceptContainerFields {
  public_access?: string;
  extras?: { source?: string } | Omit<Extras, "source">;
}
 
export interface DictionaryVersion extends Version {}
 
export interface APIDictionaryVersion extends DictionaryVersion {
  version_url: string;
  url: string;
}
 
export type ImportMetaData = {
  dictionary: string;
  dateTime: string;
};
 
export type CopyableDictionary = Pick<
  APIDictionary,
  | "description"
  | "default_locale"
  | "supported_locales"
  | "owner_url"
  | "preferred_source"
  | "public_access"
  | "references"
>;
 
export const dictionaryToCopyableDictionary = (
  dictionary: APIDictionary
): CopyableDictionary => {
  const newDictionary = pick(dictionary, [
    "description",
    "default_locale",
    "supported_locales",
    "owner_url",
    "preferred_source",
    "public_access",
    "references"
  ]);
 
  newDictionary.supported_locales = newDictionary.supported_locales ?? [];
 
  return newDictionary;
};
 
const apiDictionaryToDictionary = (
  apiDictionary?: APIDictionary
): Dictionary | undefined => {
  if (!apiDictionary) return apiDictionary;
 
  const { url, supported_locales, ...theRest } = apiDictionary;
 
  return {
    supported_locales: supported_locales || [],
    ...theRest
  };
};
 
export { apiDictionaryToDictionary };