@sd-angular/core 19.0.0-beta.5 → 19.0.0-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/table/src/models/table-option.model.d.ts +2 -1
- package/fesm2022/sd-angular-core-components-table.mjs +228 -5
- package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-autocomplete.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
- package/package.json +58 -58
- package/sd-angular-core-19.0.0-beta.7.tgz +0 -0
|
@@ -10,6 +10,7 @@ import { SdTableOptionGroup } from './table-option-group.model';
|
|
|
10
10
|
import { SdTableOptionSort } from './table-option-sort.model';
|
|
11
11
|
import { SdTableOptionPaginate } from './table-option-paginate.model';
|
|
12
12
|
import { TableOptionConfig } from './table-option-config.model';
|
|
13
|
+
import { SdPagingReq } from '@sd-angular/core/utilities';
|
|
13
14
|
export type SdTableOption<T = any> = SdTableLocalOption<T> | SdTableServerOption<T>;
|
|
14
15
|
interface SdTableBaseOption<T = any> {
|
|
15
16
|
key?: string;
|
|
@@ -32,7 +33,7 @@ interface SdTableLocalOption<T = any> extends SdTableBaseOption<T> {
|
|
|
32
33
|
}
|
|
33
34
|
interface SdTableServerOption<T = any> extends SdTableBaseOption<T> {
|
|
34
35
|
type: 'server';
|
|
35
|
-
items: (filterRequest: SdTableFilterRequest<T>) => Promise<{
|
|
36
|
+
items: (filterRequest: SdTableFilterRequest<T>, pagingReq: SdPagingReq<T>) => Promise<{
|
|
36
37
|
items: T[];
|
|
37
38
|
total: number;
|
|
38
39
|
}>;
|
|
@@ -2359,7 +2359,8 @@ class SdTable extends SdBaseSecureComponent {
|
|
|
2359
2359
|
total: 0,
|
|
2360
2360
|
};
|
|
2361
2361
|
}
|
|
2362
|
-
const
|
|
2362
|
+
const pagingReq = this.#convertPagingReq(filterReq);
|
|
2363
|
+
const data = await items(filterReq, pagingReq).catch(err => {
|
|
2363
2364
|
console.error(err);
|
|
2364
2365
|
return {
|
|
2365
2366
|
items: [],
|
|
@@ -2432,9 +2433,10 @@ class SdTable extends SdBaseSecureComponent {
|
|
|
2432
2433
|
return await result;
|
|
2433
2434
|
}
|
|
2434
2435
|
else {
|
|
2435
|
-
const
|
|
2436
|
+
const filterReq = this.#filterExportInfo(pageNumber, pageSize);
|
|
2436
2437
|
if (this.tableOption.type === 'server') {
|
|
2437
|
-
const
|
|
2438
|
+
const pagingReq = this.#convertPagingReq(filterReq);
|
|
2439
|
+
const result = this.tableOption.items(filterReq, pagingReq);
|
|
2438
2440
|
return await result;
|
|
2439
2441
|
}
|
|
2440
2442
|
else {
|
|
@@ -2451,7 +2453,7 @@ class SdTable extends SdBaseSecureComponent {
|
|
|
2451
2453
|
else {
|
|
2452
2454
|
exportedItems = this.tableOption.items;
|
|
2453
2455
|
}
|
|
2454
|
-
return this.#filterLocal(exportedItems,
|
|
2456
|
+
return this.#filterLocal(exportedItems, filterReq);
|
|
2455
2457
|
}
|
|
2456
2458
|
}
|
|
2457
2459
|
};
|
|
@@ -3099,6 +3101,228 @@ class SdTable extends SdBaseSecureComponent {
|
|
|
3099
3101
|
trackBy = (index, item) => {
|
|
3100
3102
|
return item.meta.id;
|
|
3101
3103
|
};
|
|
3104
|
+
#convertPagingReq = (filterReq) => {
|
|
3105
|
+
const { columns, filter } = this.tableOption;
|
|
3106
|
+
const externalFilters = filter?.externalFilters || [];
|
|
3107
|
+
const req = {
|
|
3108
|
+
filters: [],
|
|
3109
|
+
orders: [],
|
|
3110
|
+
pageNumber: filterReq.pageNumber,
|
|
3111
|
+
pageSize: filterReq.pageSize,
|
|
3112
|
+
};
|
|
3113
|
+
const { filters, orders } = req;
|
|
3114
|
+
const { rawColumnFilter, columnOperator, rawExternalFilter, orderBy, orderDirection } = filterReq;
|
|
3115
|
+
// Xử lý external filter
|
|
3116
|
+
for (const externalFilter of externalFilters || []) {
|
|
3117
|
+
const { field } = externalFilter;
|
|
3118
|
+
const value = rawExternalFilter?.[field];
|
|
3119
|
+
// Nếu có giá trị thì mới xử lý filter
|
|
3120
|
+
if (value !== undefined && value !== null && value !== '') {
|
|
3121
|
+
if (externalFilter.type === 'string') {
|
|
3122
|
+
// Nếu filter là equal và có dấu , ngăn cách thì hiểu là tìm nhiều ngăn cách bởi dấu phẩy
|
|
3123
|
+
if (externalFilter.defaultOperator === 'EQUAL' && value?.includes(',')) {
|
|
3124
|
+
filters.push({
|
|
3125
|
+
field,
|
|
3126
|
+
operator: 'IN',
|
|
3127
|
+
data: value.split(',').map(val => val.trim()),
|
|
3128
|
+
});
|
|
3129
|
+
}
|
|
3130
|
+
else {
|
|
3131
|
+
filters.push({
|
|
3132
|
+
field,
|
|
3133
|
+
operator: externalFilter.defaultOperator || 'CONTAIN',
|
|
3134
|
+
data: value,
|
|
3135
|
+
});
|
|
3136
|
+
}
|
|
3137
|
+
}
|
|
3138
|
+
else if (externalFilter.type === 'boolean') {
|
|
3139
|
+
filters.push({
|
|
3140
|
+
field,
|
|
3141
|
+
operator: 'EQUAL',
|
|
3142
|
+
data: value === true || value === 1 || value === 'true' || value === '1',
|
|
3143
|
+
});
|
|
3144
|
+
}
|
|
3145
|
+
else if (externalFilter.type === 'daterange') {
|
|
3146
|
+
if (typeof value === 'object' && 'from' in value && 'to' in value) {
|
|
3147
|
+
if (value?.from) {
|
|
3148
|
+
filters.push({
|
|
3149
|
+
field,
|
|
3150
|
+
operator: 'GREATER_OR_EQUAL',
|
|
3151
|
+
data: DateUtilities.begin(value?.from).toISOString(),
|
|
3152
|
+
});
|
|
3153
|
+
}
|
|
3154
|
+
if (value?.to) {
|
|
3155
|
+
filters.push({
|
|
3156
|
+
field,
|
|
3157
|
+
operator: 'LESS_THAN',
|
|
3158
|
+
data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1)).toISOString(),
|
|
3159
|
+
});
|
|
3160
|
+
}
|
|
3161
|
+
}
|
|
3162
|
+
}
|
|
3163
|
+
else if (externalFilter.type === 'date' || externalFilter.type === 'datetime') {
|
|
3164
|
+
if (DateUtilities.isDate(value)) {
|
|
3165
|
+
if (externalFilter.type === 'date') {
|
|
3166
|
+
if (externalFilter.defaultOperator === 'GREATER_OR_EQUAL') {
|
|
3167
|
+
filters.push({
|
|
3168
|
+
field,
|
|
3169
|
+
operator: 'GREATER_OR_EQUAL',
|
|
3170
|
+
data: DateUtilities.begin(value).toISOString(),
|
|
3171
|
+
});
|
|
3172
|
+
}
|
|
3173
|
+
if (externalFilter.defaultOperator === 'LESS_OR_EQUAL') {
|
|
3174
|
+
filters.push({
|
|
3175
|
+
field,
|
|
3176
|
+
operator: 'LESS_THAN',
|
|
3177
|
+
data: DateUtilities.begin(DateUtilities.addDays(value, 1)).toISOString(),
|
|
3178
|
+
});
|
|
3179
|
+
}
|
|
3180
|
+
}
|
|
3181
|
+
else {
|
|
3182
|
+
if (externalFilter.defaultOperator === 'GREATER_OR_EQUAL') {
|
|
3183
|
+
filters.push({
|
|
3184
|
+
field,
|
|
3185
|
+
operator: 'GREATER_OR_EQUAL',
|
|
3186
|
+
data: new Date(value).toISOString(),
|
|
3187
|
+
});
|
|
3188
|
+
}
|
|
3189
|
+
if (externalFilter.defaultOperator === 'LESS_OR_EQUAL') {
|
|
3190
|
+
filters.push({
|
|
3191
|
+
field,
|
|
3192
|
+
operator: 'LESS_OR_EQUAL',
|
|
3193
|
+
data: new Date(value).toISOString(),
|
|
3194
|
+
});
|
|
3195
|
+
}
|
|
3196
|
+
}
|
|
3197
|
+
}
|
|
3198
|
+
}
|
|
3199
|
+
else {
|
|
3200
|
+
if (Array.isArray(value)) {
|
|
3201
|
+
if (value.length) {
|
|
3202
|
+
filters.push({
|
|
3203
|
+
field,
|
|
3204
|
+
operator: 'IN',
|
|
3205
|
+
data: value,
|
|
3206
|
+
});
|
|
3207
|
+
}
|
|
3208
|
+
}
|
|
3209
|
+
else if (typeof value === 'object' && 'from' in value && 'to' in value) {
|
|
3210
|
+
if (value?.from) {
|
|
3211
|
+
filters.push({
|
|
3212
|
+
field,
|
|
3213
|
+
operator: 'GREATER_OR_EQUAL',
|
|
3214
|
+
data: DateUtilities.begin(value?.from).toISOString(),
|
|
3215
|
+
});
|
|
3216
|
+
}
|
|
3217
|
+
if (value?.to) {
|
|
3218
|
+
filters.push({
|
|
3219
|
+
field,
|
|
3220
|
+
operator: 'LESS_THAN',
|
|
3221
|
+
data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1)).toISOString(),
|
|
3222
|
+
});
|
|
3223
|
+
}
|
|
3224
|
+
}
|
|
3225
|
+
else {
|
|
3226
|
+
filters.push({
|
|
3227
|
+
field,
|
|
3228
|
+
operator: externalFilter.defaultOperator || 'EQUAL',
|
|
3229
|
+
data: value,
|
|
3230
|
+
});
|
|
3231
|
+
}
|
|
3232
|
+
}
|
|
3233
|
+
}
|
|
3234
|
+
}
|
|
3235
|
+
// Xử lý column filter
|
|
3236
|
+
// Xử lý column filter
|
|
3237
|
+
for (const column of columns || []) {
|
|
3238
|
+
const { field } = column;
|
|
3239
|
+
const value = rawColumnFilter?.[field];
|
|
3240
|
+
const operator = columnOperator?.[field] || column.filter?.operator?.default;
|
|
3241
|
+
// Nếu có giá trị thì mới xử lý filter
|
|
3242
|
+
if (value !== undefined && value !== null && value !== '') {
|
|
3243
|
+
if (column.type === 'string') {
|
|
3244
|
+
filters.push({
|
|
3245
|
+
field,
|
|
3246
|
+
operator: operator || 'CONTAIN',
|
|
3247
|
+
data: value,
|
|
3248
|
+
});
|
|
3249
|
+
}
|
|
3250
|
+
else if (column.type === 'boolean') {
|
|
3251
|
+
filters.push({
|
|
3252
|
+
field,
|
|
3253
|
+
operator: 'EQUAL',
|
|
3254
|
+
data: value === true || value === 1 || value === 'true' || value === '1',
|
|
3255
|
+
});
|
|
3256
|
+
}
|
|
3257
|
+
else if (column.type === 'date' || column.type === 'datetime') {
|
|
3258
|
+
if (value && typeof value === 'object' && 'from' in value && 'to' in value) {
|
|
3259
|
+
if (value?.from && value?.to) {
|
|
3260
|
+
filters.push({
|
|
3261
|
+
field,
|
|
3262
|
+
operator: 'BETWEEN',
|
|
3263
|
+
data: {
|
|
3264
|
+
from: DateUtilities.begin(value?.from).toISOString(),
|
|
3265
|
+
to: DateUtilities.end(value?.to).toISOString(),
|
|
3266
|
+
},
|
|
3267
|
+
});
|
|
3268
|
+
}
|
|
3269
|
+
else if (value?.from) {
|
|
3270
|
+
filters.push({
|
|
3271
|
+
field,
|
|
3272
|
+
operator: 'GREATER_OR_EQUAL',
|
|
3273
|
+
data: DateUtilities.begin(value?.from).toISOString(),
|
|
3274
|
+
});
|
|
3275
|
+
}
|
|
3276
|
+
else if (value?.to) {
|
|
3277
|
+
filters.push({
|
|
3278
|
+
field,
|
|
3279
|
+
operator: 'LESS_THAN',
|
|
3280
|
+
data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1)).toISOString(),
|
|
3281
|
+
});
|
|
3282
|
+
}
|
|
3283
|
+
}
|
|
3284
|
+
else {
|
|
3285
|
+
if (DateUtilities.isDate(value)) {
|
|
3286
|
+
filters.push({
|
|
3287
|
+
field,
|
|
3288
|
+
operator: 'BETWEEN',
|
|
3289
|
+
data: {
|
|
3290
|
+
from: DateUtilities.begin(value).toISOString(),
|
|
3291
|
+
to: DateUtilities.end(value).toISOString(),
|
|
3292
|
+
},
|
|
3293
|
+
});
|
|
3294
|
+
}
|
|
3295
|
+
}
|
|
3296
|
+
}
|
|
3297
|
+
else {
|
|
3298
|
+
if (Array.isArray(value)) {
|
|
3299
|
+
if (value.length) {
|
|
3300
|
+
filters.push({
|
|
3301
|
+
field,
|
|
3302
|
+
operator: 'IN',
|
|
3303
|
+
data: value,
|
|
3304
|
+
});
|
|
3305
|
+
}
|
|
3306
|
+
}
|
|
3307
|
+
else {
|
|
3308
|
+
filters.push({
|
|
3309
|
+
field,
|
|
3310
|
+
operator: operator || 'EQUAL',
|
|
3311
|
+
data: value,
|
|
3312
|
+
});
|
|
3313
|
+
}
|
|
3314
|
+
}
|
|
3315
|
+
}
|
|
3316
|
+
}
|
|
3317
|
+
// Xử lý orders
|
|
3318
|
+
if (orderBy && orderDirection) {
|
|
3319
|
+
orders.push({
|
|
3320
|
+
field: orderBy,
|
|
3321
|
+
direction: orderDirection,
|
|
3322
|
+
});
|
|
3323
|
+
}
|
|
3324
|
+
return req;
|
|
3325
|
+
};
|
|
3102
3326
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SdTable, deps: [{ token: i0.ChangeDetectorRef }, { token: i1$4.SdFormatNumberPipe }, { token: SD_TABLE_CONFIGURATION, optional: true }, { token: ConfigService }, { token: i1$1.SdExcelService }, { token: i1$1.SdNotifyService }, { token: SdTableFilterService }], target: i0.ɵɵFactoryTarget.Component });
|
|
3103
3327
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: SdTable, isStandalone: true, selector: "sd-table", inputs: { _autoId: ["autoId", "_autoId"], option: "option" }, providers: [
|
|
3104
3328
|
DatePipe,
|
|
@@ -3321,7 +3545,6 @@ const SdConvertToPagingReq = (filterRequest, args) => {
|
|
|
3321
3545
|
});
|
|
3322
3546
|
}
|
|
3323
3547
|
else if (column.type === 'date' || column.type === 'datetime') {
|
|
3324
|
-
console.log(value);
|
|
3325
3548
|
if (typeof value === 'object' && 'from' in value && 'to' in value) {
|
|
3326
3549
|
if (value?.from && value?.to) {
|
|
3327
3550
|
filters.push({
|