@sd-angular/core 19.0.0-beta.5 → 19.0.0-beta.6
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 +226 -4
- 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 +74 -74
|
@@ -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
|
|
36
|
+
items: (filterRequest: SdTableFilterRequest<T>, pagingReq?: SdPagingReq) => Promise<{
|
|
36
37
|
items: T[];
|
|
37
38
|
total: number;
|
|
38
39
|
}>;
|
|
@@ -2432,9 +2432,10 @@ class SdTable extends SdBaseSecureComponent {
|
|
|
2432
2432
|
return await result;
|
|
2433
2433
|
}
|
|
2434
2434
|
else {
|
|
2435
|
-
const
|
|
2435
|
+
const filterReq = this.#filterExportInfo(pageNumber, pageSize);
|
|
2436
2436
|
if (this.tableOption.type === 'server') {
|
|
2437
|
-
const
|
|
2437
|
+
const pagingReq = this.#convertPagingReq(filterReq);
|
|
2438
|
+
const result = this.tableOption.items(filterReq, pagingReq);
|
|
2438
2439
|
return await result;
|
|
2439
2440
|
}
|
|
2440
2441
|
else {
|
|
@@ -2451,7 +2452,7 @@ class SdTable extends SdBaseSecureComponent {
|
|
|
2451
2452
|
else {
|
|
2452
2453
|
exportedItems = this.tableOption.items;
|
|
2453
2454
|
}
|
|
2454
|
-
return this.#filterLocal(exportedItems,
|
|
2455
|
+
return this.#filterLocal(exportedItems, filterReq);
|
|
2455
2456
|
}
|
|
2456
2457
|
}
|
|
2457
2458
|
};
|
|
@@ -3099,6 +3100,228 @@ class SdTable extends SdBaseSecureComponent {
|
|
|
3099
3100
|
trackBy = (index, item) => {
|
|
3100
3101
|
return item.meta.id;
|
|
3101
3102
|
};
|
|
3103
|
+
#convertPagingReq = (filterReq) => {
|
|
3104
|
+
const { columns, filter } = this.tableOption;
|
|
3105
|
+
const externalFilters = filter?.externalFilters || [];
|
|
3106
|
+
const req = {
|
|
3107
|
+
filters: [],
|
|
3108
|
+
orders: [],
|
|
3109
|
+
pageNumber: filterReq.pageNumber,
|
|
3110
|
+
pageSize: filterReq.pageSize,
|
|
3111
|
+
};
|
|
3112
|
+
const { filters, orders } = req;
|
|
3113
|
+
const { rawColumnFilter, columnOperator, rawExternalFilter, orderBy, orderDirection } = filterReq;
|
|
3114
|
+
// Xử lý external filter
|
|
3115
|
+
for (const externalFilter of externalFilters || []) {
|
|
3116
|
+
const { field } = externalFilter;
|
|
3117
|
+
const value = rawExternalFilter?.[field];
|
|
3118
|
+
// Nếu có giá trị thì mới xử lý filter
|
|
3119
|
+
if (value !== undefined && value !== null && value !== '') {
|
|
3120
|
+
if (externalFilter.type === 'string') {
|
|
3121
|
+
// 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
|
|
3122
|
+
if (externalFilter.defaultOperator === 'EQUAL' && value?.includes(',')) {
|
|
3123
|
+
filters.push({
|
|
3124
|
+
field,
|
|
3125
|
+
operator: 'IN',
|
|
3126
|
+
data: value.split(',').map(val => val.trim()),
|
|
3127
|
+
});
|
|
3128
|
+
}
|
|
3129
|
+
else {
|
|
3130
|
+
filters.push({
|
|
3131
|
+
field,
|
|
3132
|
+
operator: externalFilter.defaultOperator || 'CONTAIN',
|
|
3133
|
+
data: value,
|
|
3134
|
+
});
|
|
3135
|
+
}
|
|
3136
|
+
}
|
|
3137
|
+
else if (externalFilter.type === 'boolean') {
|
|
3138
|
+
filters.push({
|
|
3139
|
+
field,
|
|
3140
|
+
operator: 'EQUAL',
|
|
3141
|
+
data: value === true || value === 1 || value === 'true' || value === '1',
|
|
3142
|
+
});
|
|
3143
|
+
}
|
|
3144
|
+
else if (externalFilter.type === 'daterange') {
|
|
3145
|
+
if (typeof value === 'object' && 'from' in value && 'to' in value) {
|
|
3146
|
+
if (value?.from) {
|
|
3147
|
+
filters.push({
|
|
3148
|
+
field,
|
|
3149
|
+
operator: 'GREATER_OR_EQUAL',
|
|
3150
|
+
data: DateUtilities.begin(value?.from).toISOString(),
|
|
3151
|
+
});
|
|
3152
|
+
}
|
|
3153
|
+
if (value?.to) {
|
|
3154
|
+
filters.push({
|
|
3155
|
+
field,
|
|
3156
|
+
operator: 'LESS_THAN',
|
|
3157
|
+
data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1)).toISOString(),
|
|
3158
|
+
});
|
|
3159
|
+
}
|
|
3160
|
+
}
|
|
3161
|
+
}
|
|
3162
|
+
else if (externalFilter.type === 'date' || externalFilter.type === 'datetime') {
|
|
3163
|
+
if (DateUtilities.isDate(value)) {
|
|
3164
|
+
if (externalFilter.type === 'date') {
|
|
3165
|
+
if (externalFilter.defaultOperator === 'GREATER_OR_EQUAL') {
|
|
3166
|
+
filters.push({
|
|
3167
|
+
field,
|
|
3168
|
+
operator: 'GREATER_OR_EQUAL',
|
|
3169
|
+
data: DateUtilities.begin(value).toISOString(),
|
|
3170
|
+
});
|
|
3171
|
+
}
|
|
3172
|
+
if (externalFilter.defaultOperator === 'LESS_OR_EQUAL') {
|
|
3173
|
+
filters.push({
|
|
3174
|
+
field,
|
|
3175
|
+
operator: 'LESS_THAN',
|
|
3176
|
+
data: DateUtilities.begin(DateUtilities.addDays(value, 1)).toISOString(),
|
|
3177
|
+
});
|
|
3178
|
+
}
|
|
3179
|
+
}
|
|
3180
|
+
else {
|
|
3181
|
+
if (externalFilter.defaultOperator === 'GREATER_OR_EQUAL') {
|
|
3182
|
+
filters.push({
|
|
3183
|
+
field,
|
|
3184
|
+
operator: 'GREATER_OR_EQUAL',
|
|
3185
|
+
data: new Date(value).toISOString(),
|
|
3186
|
+
});
|
|
3187
|
+
}
|
|
3188
|
+
if (externalFilter.defaultOperator === 'LESS_OR_EQUAL') {
|
|
3189
|
+
filters.push({
|
|
3190
|
+
field,
|
|
3191
|
+
operator: 'LESS_OR_EQUAL',
|
|
3192
|
+
data: new Date(value).toISOString(),
|
|
3193
|
+
});
|
|
3194
|
+
}
|
|
3195
|
+
}
|
|
3196
|
+
}
|
|
3197
|
+
}
|
|
3198
|
+
else {
|
|
3199
|
+
if (Array.isArray(value)) {
|
|
3200
|
+
if (value.length) {
|
|
3201
|
+
filters.push({
|
|
3202
|
+
field,
|
|
3203
|
+
operator: 'IN',
|
|
3204
|
+
data: value,
|
|
3205
|
+
});
|
|
3206
|
+
}
|
|
3207
|
+
}
|
|
3208
|
+
else if (typeof value === 'object' && 'from' in value && 'to' in value) {
|
|
3209
|
+
if (value?.from) {
|
|
3210
|
+
filters.push({
|
|
3211
|
+
field,
|
|
3212
|
+
operator: 'GREATER_OR_EQUAL',
|
|
3213
|
+
data: DateUtilities.begin(value?.from).toISOString(),
|
|
3214
|
+
});
|
|
3215
|
+
}
|
|
3216
|
+
if (value?.to) {
|
|
3217
|
+
filters.push({
|
|
3218
|
+
field,
|
|
3219
|
+
operator: 'LESS_THAN',
|
|
3220
|
+
data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1)).toISOString(),
|
|
3221
|
+
});
|
|
3222
|
+
}
|
|
3223
|
+
}
|
|
3224
|
+
else {
|
|
3225
|
+
filters.push({
|
|
3226
|
+
field,
|
|
3227
|
+
operator: externalFilter.defaultOperator || 'EQUAL',
|
|
3228
|
+
data: value,
|
|
3229
|
+
});
|
|
3230
|
+
}
|
|
3231
|
+
}
|
|
3232
|
+
}
|
|
3233
|
+
}
|
|
3234
|
+
// Xử lý column filter
|
|
3235
|
+
// Xử lý column filter
|
|
3236
|
+
for (const column of columns || []) {
|
|
3237
|
+
const { field } = column;
|
|
3238
|
+
const value = rawColumnFilter?.[field];
|
|
3239
|
+
const operator = columnOperator?.[field] || column.filter?.operator?.default;
|
|
3240
|
+
// Nếu có giá trị thì mới xử lý filter
|
|
3241
|
+
if (value !== undefined && value !== null && value !== '') {
|
|
3242
|
+
if (column.type === 'string') {
|
|
3243
|
+
filters.push({
|
|
3244
|
+
field,
|
|
3245
|
+
operator: operator || 'CONTAIN',
|
|
3246
|
+
data: value,
|
|
3247
|
+
});
|
|
3248
|
+
}
|
|
3249
|
+
else if (column.type === 'boolean') {
|
|
3250
|
+
filters.push({
|
|
3251
|
+
field,
|
|
3252
|
+
operator: 'EQUAL',
|
|
3253
|
+
data: value === true || value === 1 || value === 'true' || value === '1',
|
|
3254
|
+
});
|
|
3255
|
+
}
|
|
3256
|
+
else if (column.type === 'date' || column.type === 'datetime') {
|
|
3257
|
+
if (value && typeof value === 'object' && 'from' in value && 'to' in value) {
|
|
3258
|
+
if (value?.from && value?.to) {
|
|
3259
|
+
filters.push({
|
|
3260
|
+
field,
|
|
3261
|
+
operator: 'BETWEEN',
|
|
3262
|
+
data: {
|
|
3263
|
+
from: DateUtilities.begin(value?.from).toISOString(),
|
|
3264
|
+
to: DateUtilities.end(value?.to).toISOString(),
|
|
3265
|
+
},
|
|
3266
|
+
});
|
|
3267
|
+
}
|
|
3268
|
+
else if (value?.from) {
|
|
3269
|
+
filters.push({
|
|
3270
|
+
field,
|
|
3271
|
+
operator: 'GREATER_OR_EQUAL',
|
|
3272
|
+
data: DateUtilities.begin(value?.from).toISOString(),
|
|
3273
|
+
});
|
|
3274
|
+
}
|
|
3275
|
+
else if (value?.to) {
|
|
3276
|
+
filters.push({
|
|
3277
|
+
field,
|
|
3278
|
+
operator: 'LESS_THAN',
|
|
3279
|
+
data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1)).toISOString(),
|
|
3280
|
+
});
|
|
3281
|
+
}
|
|
3282
|
+
}
|
|
3283
|
+
else {
|
|
3284
|
+
if (DateUtilities.isDate(value)) {
|
|
3285
|
+
filters.push({
|
|
3286
|
+
field,
|
|
3287
|
+
operator: 'BETWEEN',
|
|
3288
|
+
data: {
|
|
3289
|
+
from: DateUtilities.begin(value).toISOString(),
|
|
3290
|
+
to: DateUtilities.end(value).toISOString(),
|
|
3291
|
+
},
|
|
3292
|
+
});
|
|
3293
|
+
}
|
|
3294
|
+
}
|
|
3295
|
+
}
|
|
3296
|
+
else {
|
|
3297
|
+
if (Array.isArray(value)) {
|
|
3298
|
+
if (value.length) {
|
|
3299
|
+
filters.push({
|
|
3300
|
+
field,
|
|
3301
|
+
operator: 'IN',
|
|
3302
|
+
data: value,
|
|
3303
|
+
});
|
|
3304
|
+
}
|
|
3305
|
+
}
|
|
3306
|
+
else {
|
|
3307
|
+
filters.push({
|
|
3308
|
+
field,
|
|
3309
|
+
operator: operator || 'EQUAL',
|
|
3310
|
+
data: value,
|
|
3311
|
+
});
|
|
3312
|
+
}
|
|
3313
|
+
}
|
|
3314
|
+
}
|
|
3315
|
+
}
|
|
3316
|
+
// Xử lý orders
|
|
3317
|
+
if (orderBy && orderDirection) {
|
|
3318
|
+
orders.push({
|
|
3319
|
+
field: orderBy,
|
|
3320
|
+
direction: orderDirection,
|
|
3321
|
+
});
|
|
3322
|
+
}
|
|
3323
|
+
return req;
|
|
3324
|
+
};
|
|
3102
3325
|
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
3326
|
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
3327
|
DatePipe,
|
|
@@ -3321,7 +3544,6 @@ const SdConvertToPagingReq = (filterRequest, args) => {
|
|
|
3321
3544
|
});
|
|
3322
3545
|
}
|
|
3323
3546
|
else if (column.type === 'date' || column.type === 'datetime') {
|
|
3324
|
-
console.log(value);
|
|
3325
3547
|
if (typeof value === 'object' && 'from' in value && 'to' in value) {
|
|
3326
3548
|
if (value?.from && value?.to) {
|
|
3327
3549
|
filters.push({
|