-
Notifications
You must be signed in to change notification settings - Fork 6
/
Dictionaries.ts
189 lines (164 loc) · 5.11 KB
/
Dictionaries.ts
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
import { GenericID } from "../../common/common.types";
import TagoIOModule, { GenericModuleParams } from "../../common/TagoIOModule";
import dateParser from "../Utils/dateParser";
import {
DictionaryCreateInfo,
DictionaryInfo,
DictionaryQuery,
LanguageData,
LanguageEditData,
LanguageInfoQuery,
} from "./dictionaries.types";
import { Cache } from "../../modules";
class Dictionaries extends TagoIOModule<GenericModuleParams> {
/**
* Retrieve a list with all dictionaries from an account.
*
* @default
* ```json
* queryObj: {
* page: 1,
* fields: ["id", "name", "slug", "languages"],
* filter: {},
* amount: 20,
* orderBy: "name,asc",
* }
* ```
*
* @param queryObj Search query params.
*/
public async list(queryObj?: DictionaryQuery): Promise<DictionaryInfo[]> {
let result = await this.doRequest<DictionaryInfo[]>({
path: "/dictionary",
method: "GET",
params: {
page: queryObj?.page || 1,
fields: queryObj?.fields || ["id", "name", "slug", "languages"],
filter: queryObj?.filter || {},
amount: queryObj?.amount || 20,
orderBy: queryObj?.orderBy ? `${queryObj.orderBy[0]},${queryObj.orderBy[1]}` : "name,asc",
},
});
result = result.map((data) => dateParser(data, ["created_at", "updated_at"]));
return result;
}
/**
* Generate a new dictionary for the account.
*
* @param dictionaryObj Object with data to create new dictionary.
*/
public async create(dictionaryObj: DictionaryCreateInfo): Promise<{ dictionary: string }> {
const result = await this.doRequest<{ dictionary: string }>({
path: "/dictionary",
method: "POST",
body: dictionaryObj,
});
return result;
}
/**
* Modify any property of a dictionary.
*
* @param dictionaryID Dictionary ID.
* @param dictionaryObj Dictionary Object data to be replaced.
*/
public async edit(dictionaryID: GenericID, dictionaryObj: Partial<DictionaryCreateInfo>): Promise<string> {
const result = await this.doRequest<string>({
path: `/dictionary/${dictionaryID}`,
method: "PUT",
body: dictionaryObj,
});
return result;
}
/**
* Delete a dictionary from the account.
*
* @param dictionaryID Dictionary ID.
*/
public async delete(dictionaryID: GenericID): Promise<string> {
const result = await this.doRequest<string>({
path: `/dictionary/${dictionaryID}`,
method: "DELETE",
});
Cache.clearCache();
return result;
}
/**
* Get information about a dictionary.
*
* @param dictionaryID Dictionary ID.
*/
public async info(dictionaryID: GenericID): Promise<DictionaryInfo> {
let result = await this.doRequest<DictionaryInfo>({
path: `/dictionary/${dictionaryID}`,
method: "GET",
});
result = dateParser(result, ["created_at", "updated_at"]);
return result;
}
public async languageEdit(dictionaryID: GenericID, locale: string, languageObj: LanguageEditData): Promise<string> {
const result = await this.doRequest<string>({
path: `/dictionary/${dictionaryID}/${locale}`,
method: "PUT",
body: languageObj,
});
Cache.clearCache();
return result;
}
/**
* Delete a language from a dictionary.
*
* @param dictionaryID Dictionary ID.
* @param locale Language locale string (e.g. `en-US`).
*/
public async languageDelete(dictionaryID: GenericID, locale: string): Promise<string> {
const result = await this.doRequest<string>({
path: `/dictionary/${dictionaryID}/${locale}`,
method: "DELETE",
});
Cache.clearCache();
return result;
}
/**
* Get information about a dictionary by ID.
*
* @param dictionaryID Dictionary ID.
* @param locale Language locale string (e.g. `en-US`).
* @param queryObj Language info query params.
*/
public async languageInfo(
dictionaryID: GenericID,
locale: string,
queryObj?: LanguageInfoQuery
): Promise<LanguageData> {
const result = await this.doRequest<LanguageData>({
path: `/dictionary/${dictionaryID}/${locale}`,
method: "GET",
params: {
// Default to not getting the fallback language info if language is not found
// as this route is mainly used to edit a dictionary
fallback: queryObj?.fallback || false,
},
});
return result;
}
/**
* Get information about a dictionary querying by slug instead of the dictionary's ID.
*
* @param slug Dictionary slug.
* @param locale Language locale string (e.g. `en-US`).
* @param queryObj Language info query params.
*/
public async languageInfoBySlug(slug: string, locale: string, queryObj?: LanguageInfoQuery): Promise<LanguageData> {
const result = await this.doRequest<LanguageData>({
path: `/dictionary/${slug}/${locale}`,
method: "GET",
params: {
// Default to getting the fallback language info if language is not found
// as this route is mainly used to use the dictionary strings in applications
fallback: queryObj?.fallback || true,
},
});
return result;
}
}
export default Dictionaries;