datajunction-ui 0.0.1-rc.24 → 0.0.1-rc.26
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/.env +1 -0
- package/package.json +3 -2
- package/src/app/components/Tab.jsx +0 -1
- package/src/app/constants.js +2 -2
- package/src/app/icons/LoadingIcon.jsx +14 -0
- package/src/app/index.tsx +11 -1
- package/src/app/pages/AddEditNodePage/__tests__/AddEditNodePageFormFailed.test.jsx +28 -2
- package/src/app/pages/AddEditNodePage/__tests__/AddEditNodePageFormSuccess.test.jsx +44 -9
- package/src/app/pages/AddEditNodePage/__tests__/__snapshots__/AddEditNodePageFormFailed.test.jsx.snap +1 -0
- package/src/app/pages/AddEditNodePage/__tests__/__snapshots__/AddEditNodePageFormSuccess.test.jsx.snap +0 -50
- package/src/app/pages/AddEditNodePage/__tests__/index.test.jsx +2 -0
- package/src/app/pages/AddEditNodePage/index.jsx +60 -6
- package/src/app/pages/AddEditTagPage/Loadable.jsx +16 -0
- package/src/app/pages/AddEditTagPage/__tests__/AddEditTagPage.test.jsx +107 -0
- package/src/app/pages/AddEditTagPage/index.jsx +132 -0
- package/src/app/pages/LoginPage/LoginForm.jsx +124 -0
- package/src/app/pages/LoginPage/SignupForm.jsx +156 -0
- package/src/app/pages/LoginPage/__tests__/index.test.jsx +34 -2
- package/src/app/pages/LoginPage/index.jsx +9 -82
- package/src/app/pages/NamespacePage/index.jsx +5 -0
- package/src/app/pages/NodePage/AddBackfillPopover.jsx +166 -0
- package/src/app/pages/NodePage/AddMaterializationPopover.jsx +161 -0
- package/src/app/pages/NodePage/EditColumnPopover.jsx +1 -1
- package/src/app/pages/NodePage/LinkDimensionPopover.jsx +0 -1
- package/src/app/pages/NodePage/NodeColumnTab.jsx +102 -25
- package/src/app/pages/NodePage/NodeInfoTab.jsx +33 -23
- package/src/app/pages/NodePage/NodeMaterializationTab.jsx +158 -99
- package/src/app/pages/NodePage/PartitionColumnPopover.jsx +153 -0
- package/src/app/pages/NodePage/__tests__/AddBackfillPopover.test.jsx +47 -0
- package/src/app/pages/NodePage/__tests__/NodePage.test.jsx +47 -17
- package/src/app/pages/NodePage/__tests__/__snapshots__/NodePage.test.jsx.snap +101 -100
- package/src/app/pages/RegisterTablePage/__tests__/__snapshots__/RegisterTablePage.test.jsx.snap +1 -0
- package/src/app/pages/Root/index.tsx +1 -1
- package/src/app/pages/TagPage/Loadable.jsx +16 -0
- package/src/app/pages/TagPage/__tests__/TagPage.test.jsx +70 -0
- package/src/app/pages/TagPage/index.jsx +79 -0
- package/src/app/services/DJService.js +166 -1
- package/src/app/services/__tests__/DJService.test.jsx +196 -1
- package/src/mocks/mockNodes.jsx +64 -31
- package/src/styles/dag.css +4 -0
- package/src/styles/index.css +89 -1
- package/src/styles/loading.css +34 -0
- package/src/styles/login.css +17 -3
- package/src/utils/form.jsx +2 -2
|
@@ -28,7 +28,7 @@ describe('DataJunctionAPI', () => {
|
|
|
28
28
|
it('calls logout correctly', async () => {
|
|
29
29
|
fetch.mockResponseOnce(JSON.stringify({}));
|
|
30
30
|
await DataJunctionAPI.logout();
|
|
31
|
-
expect(fetch).toHaveBeenCalledWith(`${DJ_URL}/
|
|
31
|
+
expect(fetch).toHaveBeenCalledWith(`${DJ_URL}/logout/`, {
|
|
32
32
|
credentials: 'include',
|
|
33
33
|
method: 'POST',
|
|
34
34
|
});
|
|
@@ -606,4 +606,199 @@ describe('DataJunctionAPI', () => {
|
|
|
606
606
|
},
|
|
607
607
|
);
|
|
608
608
|
});
|
|
609
|
+
|
|
610
|
+
it('calls addNamespace correctly', async () => {
|
|
611
|
+
fetch.mockResponseOnce(JSON.stringify({}));
|
|
612
|
+
await DataJunctionAPI.addNamespace('test');
|
|
613
|
+
expect(fetch).toHaveBeenCalledWith(`${DJ_URL}/namespaces/test`, {
|
|
614
|
+
credentials: 'include',
|
|
615
|
+
headers: {
|
|
616
|
+
'Content-Type': 'application/json',
|
|
617
|
+
},
|
|
618
|
+
method: 'POST',
|
|
619
|
+
});
|
|
620
|
+
});
|
|
621
|
+
|
|
622
|
+
it('calls listTags correctly', async () => {
|
|
623
|
+
fetch.mockResponseOnce(JSON.stringify(mocks.tags));
|
|
624
|
+
const res = await DataJunctionAPI.listTags();
|
|
625
|
+
expect(fetch).toHaveBeenCalledWith(`${DJ_URL}/tags`, {
|
|
626
|
+
credentials: 'include',
|
|
627
|
+
headers: {
|
|
628
|
+
'Content-Type': 'application/json',
|
|
629
|
+
},
|
|
630
|
+
method: 'GET',
|
|
631
|
+
});
|
|
632
|
+
expect(res).toEqual(mocks.tags);
|
|
633
|
+
});
|
|
634
|
+
|
|
635
|
+
it('calls getTag correctly', async () => {
|
|
636
|
+
fetch.mockResponseOnce(JSON.stringify(mocks.tags[0]));
|
|
637
|
+
const res = await DataJunctionAPI.getTag('report.financials');
|
|
638
|
+
expect(fetch).toHaveBeenCalledWith(`${DJ_URL}/tags/report.financials`, {
|
|
639
|
+
credentials: 'include',
|
|
640
|
+
headers: {
|
|
641
|
+
'Content-Type': 'application/json',
|
|
642
|
+
},
|
|
643
|
+
method: 'GET',
|
|
644
|
+
});
|
|
645
|
+
expect(res).toEqual(mocks.tags[0]);
|
|
646
|
+
});
|
|
647
|
+
|
|
648
|
+
it('calls listNodesForTag correctly', async () => {
|
|
649
|
+
fetch.mockResponseOnce(JSON.stringify(mocks.mockLinkedNodes));
|
|
650
|
+
const res = await DataJunctionAPI.listNodesForTag('report.financials');
|
|
651
|
+
expect(fetch).toHaveBeenCalledWith(
|
|
652
|
+
`${DJ_URL}/tags/report.financials/nodes`,
|
|
653
|
+
{
|
|
654
|
+
credentials: 'include',
|
|
655
|
+
headers: {
|
|
656
|
+
'Content-Type': 'application/json',
|
|
657
|
+
},
|
|
658
|
+
method: 'GET',
|
|
659
|
+
},
|
|
660
|
+
);
|
|
661
|
+
expect(res).toEqual(mocks.mockLinkedNodes);
|
|
662
|
+
});
|
|
663
|
+
|
|
664
|
+
it('calls tagsNode correctly', async () => {
|
|
665
|
+
fetch.mockResponseOnce(JSON.stringify(mocks.mockLinkedNodes));
|
|
666
|
+
await DataJunctionAPI.tagsNode('default.num_repair_orders', [
|
|
667
|
+
'report.financials',
|
|
668
|
+
'report.forecasts',
|
|
669
|
+
]);
|
|
670
|
+
expect(fetch).toHaveBeenCalledWith(
|
|
671
|
+
`${DJ_URL}/nodes/default.num_repair_orders/tags?tag_names=report.financials&tag_names=report.forecasts`,
|
|
672
|
+
{
|
|
673
|
+
credentials: 'include',
|
|
674
|
+
headers: {
|
|
675
|
+
'Content-Type': 'application/json',
|
|
676
|
+
},
|
|
677
|
+
method: 'POST',
|
|
678
|
+
},
|
|
679
|
+
);
|
|
680
|
+
});
|
|
681
|
+
|
|
682
|
+
it('calls addTag correctly', async () => {
|
|
683
|
+
fetch.mockResponseOnce(JSON.stringify(mocks.mockLinkedNodes));
|
|
684
|
+
await DataJunctionAPI.addTag(
|
|
685
|
+
'report.financials',
|
|
686
|
+
'Financial Reports',
|
|
687
|
+
'report',
|
|
688
|
+
'financial reports',
|
|
689
|
+
);
|
|
690
|
+
expect(fetch).toHaveBeenCalledWith(`${DJ_URL}/tags`, {
|
|
691
|
+
credentials: 'include',
|
|
692
|
+
headers: {
|
|
693
|
+
'Content-Type': 'application/json',
|
|
694
|
+
},
|
|
695
|
+
body: JSON.stringify({
|
|
696
|
+
name: 'report.financials',
|
|
697
|
+
display_name: 'Financial Reports',
|
|
698
|
+
tag_type: 'report',
|
|
699
|
+
description: 'financial reports',
|
|
700
|
+
}),
|
|
701
|
+
method: 'POST',
|
|
702
|
+
});
|
|
703
|
+
});
|
|
704
|
+
|
|
705
|
+
it('calls editTag correctly', async () => {
|
|
706
|
+
fetch.mockResponseOnce(JSON.stringify({}));
|
|
707
|
+
await DataJunctionAPI.editTag(
|
|
708
|
+
'report.financials',
|
|
709
|
+
'Financial reports',
|
|
710
|
+
'Financial Reports',
|
|
711
|
+
);
|
|
712
|
+
expect(fetch).toHaveBeenCalledWith(`${DJ_URL}/tags/report.financials`, {
|
|
713
|
+
credentials: 'include',
|
|
714
|
+
headers: {
|
|
715
|
+
'Content-Type': 'application/json',
|
|
716
|
+
},
|
|
717
|
+
body: JSON.stringify({
|
|
718
|
+
description: 'Financial reports',
|
|
719
|
+
display_name: 'Financial Reports',
|
|
720
|
+
}),
|
|
721
|
+
method: 'PATCH',
|
|
722
|
+
});
|
|
723
|
+
});
|
|
724
|
+
|
|
725
|
+
it('calls setPartition correctly', async () => {
|
|
726
|
+
fetch.mockResponseOnce(JSON.stringify({}));
|
|
727
|
+
await DataJunctionAPI.setPartition(
|
|
728
|
+
'default.hard_hat',
|
|
729
|
+
'hire_date',
|
|
730
|
+
'temporal',
|
|
731
|
+
'yyyyMMdd',
|
|
732
|
+
'day',
|
|
733
|
+
);
|
|
734
|
+
expect(fetch).toHaveBeenCalledWith(
|
|
735
|
+
`${DJ_URL}/nodes/default.hard_hat/columns/hire_date/partition`,
|
|
736
|
+
{
|
|
737
|
+
credentials: 'include',
|
|
738
|
+
headers: {
|
|
739
|
+
'Content-Type': 'application/json',
|
|
740
|
+
},
|
|
741
|
+
body: JSON.stringify({
|
|
742
|
+
type_: 'temporal',
|
|
743
|
+
format: 'yyyyMMdd',
|
|
744
|
+
granularity: 'day',
|
|
745
|
+
}),
|
|
746
|
+
method: 'POST',
|
|
747
|
+
},
|
|
748
|
+
);
|
|
749
|
+
});
|
|
750
|
+
|
|
751
|
+
it('calls materialize correctly', async () => {
|
|
752
|
+
fetch.mockResponseOnce(JSON.stringify({}));
|
|
753
|
+
await DataJunctionAPI.materialize(
|
|
754
|
+
'default.hard_hat',
|
|
755
|
+
'spark',
|
|
756
|
+
'3.3',
|
|
757
|
+
'@daily',
|
|
758
|
+
'{}',
|
|
759
|
+
);
|
|
760
|
+
expect(fetch).toHaveBeenCalledWith(
|
|
761
|
+
`${DJ_URL}/nodes/default.hard_hat/materialization`,
|
|
762
|
+
{
|
|
763
|
+
credentials: 'include',
|
|
764
|
+
headers: {
|
|
765
|
+
'Content-Type': 'application/json',
|
|
766
|
+
},
|
|
767
|
+
body: JSON.stringify({
|
|
768
|
+
engine: {
|
|
769
|
+
name: 'spark',
|
|
770
|
+
version: '3.3',
|
|
771
|
+
},
|
|
772
|
+
schedule: '@daily',
|
|
773
|
+
config: {},
|
|
774
|
+
}),
|
|
775
|
+
method: 'POST',
|
|
776
|
+
},
|
|
777
|
+
);
|
|
778
|
+
});
|
|
779
|
+
|
|
780
|
+
it('calls runBackfill correctly', async () => {
|
|
781
|
+
fetch.mockResponseOnce(JSON.stringify({}));
|
|
782
|
+
await DataJunctionAPI.runBackfill(
|
|
783
|
+
'default.hard_hat',
|
|
784
|
+
'spark',
|
|
785
|
+
'hire_date',
|
|
786
|
+
'20230101',
|
|
787
|
+
'20230202',
|
|
788
|
+
);
|
|
789
|
+
expect(fetch).toHaveBeenCalledWith(
|
|
790
|
+
`${DJ_URL}/nodes/default.hard_hat/materializations/spark/backfill`,
|
|
791
|
+
{
|
|
792
|
+
credentials: 'include',
|
|
793
|
+
headers: {
|
|
794
|
+
'Content-Type': 'application/json',
|
|
795
|
+
},
|
|
796
|
+
body: JSON.stringify({
|
|
797
|
+
column_name: 'hire_date',
|
|
798
|
+
range: ['20230101', '20230202'],
|
|
799
|
+
}),
|
|
800
|
+
method: 'POST',
|
|
801
|
+
},
|
|
802
|
+
);
|
|
803
|
+
});
|
|
609
804
|
});
|
package/src/mocks/mockNodes.jsx
CHANGED
|
@@ -27,8 +27,10 @@ export const mocks = {
|
|
|
27
27
|
{
|
|
28
28
|
name: 'default_DOT_num_repair_orders',
|
|
29
29
|
type: 'bigint',
|
|
30
|
+
display_name: 'Default DOT num repair orders',
|
|
30
31
|
attributes: [],
|
|
31
32
|
dimension: null,
|
|
33
|
+
partition: null,
|
|
32
34
|
},
|
|
33
35
|
],
|
|
34
36
|
primary_key: ['repair_order_id', 'country'],
|
|
@@ -40,7 +42,7 @@ export const mocks = {
|
|
|
40
42
|
},
|
|
41
43
|
],
|
|
42
44
|
created_at: '2023-08-21T16:48:56.841631+00:00',
|
|
43
|
-
tags: [],
|
|
45
|
+
tags: [{ name: 'purpose', display_name: 'Purpose' }],
|
|
44
46
|
dimensions: [
|
|
45
47
|
{
|
|
46
48
|
value: 'default.date_dim.dateint',
|
|
@@ -243,8 +245,10 @@ export const mocks = {
|
|
|
243
245
|
{
|
|
244
246
|
name: 'default_DOT_avg_repair_price',
|
|
245
247
|
type: 'double',
|
|
248
|
+
display_name: 'Default DOT avg repair price',
|
|
246
249
|
attributes: [],
|
|
247
250
|
dimension: null,
|
|
251
|
+
partition: null,
|
|
248
252
|
},
|
|
249
253
|
],
|
|
250
254
|
metricNodeHistory: [
|
|
@@ -336,32 +340,19 @@ export const mocks = {
|
|
|
336
340
|
],
|
|
337
341
|
nodeMaterializations: [
|
|
338
342
|
{
|
|
343
|
+
backfills: [
|
|
344
|
+
{
|
|
345
|
+
spec: {
|
|
346
|
+
column_name: 'default_DOT_hard_hat_DOT_hire_date',
|
|
347
|
+
values: null,
|
|
348
|
+
range: ['20230101', '20230102'],
|
|
349
|
+
},
|
|
350
|
+
urls: [],
|
|
351
|
+
},
|
|
352
|
+
],
|
|
339
353
|
name: 'country_birth_date_contractor_id_379232101',
|
|
340
354
|
engine: { name: 'spark', version: '2.4.4', uri: null, dialect: 'spark' },
|
|
341
355
|
config: {
|
|
342
|
-
partitions: [
|
|
343
|
-
{
|
|
344
|
-
name: 'country',
|
|
345
|
-
values: ['DE', 'MY'],
|
|
346
|
-
range: null,
|
|
347
|
-
expression: null,
|
|
348
|
-
type_: 'categorical',
|
|
349
|
-
},
|
|
350
|
-
{
|
|
351
|
-
name: 'birth_date',
|
|
352
|
-
values: null,
|
|
353
|
-
range: [20010101, 20020101],
|
|
354
|
-
expression: null,
|
|
355
|
-
type_: 'temporal',
|
|
356
|
-
},
|
|
357
|
-
{
|
|
358
|
-
name: 'contractor_id',
|
|
359
|
-
values: null,
|
|
360
|
-
range: [1, 10],
|
|
361
|
-
expression: null,
|
|
362
|
-
type_: 'categorical',
|
|
363
|
-
},
|
|
364
|
-
],
|
|
365
356
|
spark: {},
|
|
366
357
|
query:
|
|
367
358
|
"SELECT default_DOT_hard_hats.address,\n\tdefault_DOT_hard_hats.birth_date,\n\tdefault_DOT_hard_hats.city,\n\tdefault_DOT_hard_hats.contractor_id,\n\tdefault_DOT_hard_hats.country,\n\tdefault_DOT_hard_hats.first_name,\n\tdefault_DOT_hard_hats.hard_hat_id,\n\tdefault_DOT_hard_hats.hire_date,\n\tdefault_DOT_hard_hats.last_name,\n\tdefault_DOT_hard_hats.manager,\n\tdefault_DOT_hard_hats.postal_code,\n\tdefault_DOT_hard_hats.state,\n\tdefault_DOT_hard_hats.title \n FROM roads.hard_hats AS default_DOT_hard_hats \n WHERE default_DOT_hard_hats.country IN ('DE', 'MY') AND default_DOT_hard_hats.contractor_id BETWEEN 1 AND 10\n\n",
|
|
@@ -402,6 +393,7 @@ export const mocks = {
|
|
|
402
393
|
{
|
|
403
394
|
name: 'default_DOT_avg_repair_price',
|
|
404
395
|
type: 'double',
|
|
396
|
+
display_name: 'Default DOT avg repair price',
|
|
405
397
|
attributes: [],
|
|
406
398
|
dimension: null,
|
|
407
399
|
},
|
|
@@ -442,30 +434,35 @@ export const mocks = {
|
|
|
442
434
|
{
|
|
443
435
|
name: 'default_DOT_num_repair_orders',
|
|
444
436
|
type: 'bigint',
|
|
437
|
+
display_name: 'Default DOT num repair orders',
|
|
445
438
|
attributes: [],
|
|
446
439
|
dimension: null,
|
|
447
440
|
},
|
|
448
441
|
{
|
|
449
442
|
name: 'default_DOT_avg_repair_price',
|
|
450
443
|
type: 'double',
|
|
444
|
+
display_name: 'Default DOT avg repair price',
|
|
451
445
|
attributes: [],
|
|
452
446
|
dimension: null,
|
|
453
447
|
},
|
|
454
448
|
{
|
|
455
449
|
name: 'default_DOT_total_repair_cost',
|
|
456
450
|
type: 'double',
|
|
451
|
+
display_name: 'Default DOT total repair cost',
|
|
457
452
|
attributes: [],
|
|
458
453
|
dimension: null,
|
|
459
454
|
},
|
|
460
455
|
{
|
|
461
456
|
name: 'default_DOT_total_repair_order_discounts',
|
|
462
457
|
type: 'double',
|
|
458
|
+
display_name: 'Default DOT total repair order discounts',
|
|
463
459
|
attributes: [],
|
|
464
460
|
dimension: null,
|
|
465
461
|
},
|
|
466
462
|
{
|
|
467
463
|
name: 'company_name',
|
|
468
464
|
type: 'string',
|
|
465
|
+
display_name: 'Company Name',
|
|
469
466
|
attributes: [
|
|
470
467
|
{
|
|
471
468
|
attribute_type: {
|
|
@@ -821,6 +818,7 @@ export const mocks = {
|
|
|
821
818
|
{
|
|
822
819
|
name: 'default_DOT_avg_repair_price',
|
|
823
820
|
type: 'double',
|
|
821
|
+
display_name: 'Default DOT avg repair price',
|
|
824
822
|
attributes: [],
|
|
825
823
|
dimension: null,
|
|
826
824
|
},
|
|
@@ -1044,6 +1042,7 @@ export const mocks = {
|
|
|
1044
1042
|
{
|
|
1045
1043
|
name: 'repair_order_id',
|
|
1046
1044
|
type: 'int',
|
|
1045
|
+
display_name: 'Repair Order Id',
|
|
1047
1046
|
attributes: [],
|
|
1048
1047
|
dimension: {
|
|
1049
1048
|
name: 'default.repair_order',
|
|
@@ -1052,24 +1051,28 @@ export const mocks = {
|
|
|
1052
1051
|
{
|
|
1053
1052
|
name: 'repair_type_id',
|
|
1054
1053
|
type: 'int',
|
|
1054
|
+
display_name: 'Repair Type Id',
|
|
1055
1055
|
attributes: [],
|
|
1056
1056
|
dimension: null,
|
|
1057
1057
|
},
|
|
1058
1058
|
{
|
|
1059
1059
|
name: 'price',
|
|
1060
1060
|
type: 'float',
|
|
1061
|
+
display_name: 'Price',
|
|
1061
1062
|
attributes: [],
|
|
1062
1063
|
dimension: null,
|
|
1063
1064
|
},
|
|
1064
1065
|
{
|
|
1065
1066
|
name: 'quantity',
|
|
1066
1067
|
type: 'int',
|
|
1068
|
+
display_name: 'Quantity',
|
|
1067
1069
|
attributes: [],
|
|
1068
1070
|
dimension: null,
|
|
1069
1071
|
},
|
|
1070
1072
|
{
|
|
1071
1073
|
name: 'discount',
|
|
1072
1074
|
type: 'float',
|
|
1075
|
+
display_name: 'Discount',
|
|
1073
1076
|
attributes: [],
|
|
1074
1077
|
dimension: null,
|
|
1075
1078
|
},
|
|
@@ -1108,6 +1111,7 @@ export const mocks = {
|
|
|
1108
1111
|
{
|
|
1109
1112
|
name: 'dateint',
|
|
1110
1113
|
type: 'timestamp',
|
|
1114
|
+
display_name: 'Dateint',
|
|
1111
1115
|
attributes: [
|
|
1112
1116
|
{
|
|
1113
1117
|
attribute_type: {
|
|
@@ -1121,18 +1125,21 @@ export const mocks = {
|
|
|
1121
1125
|
{
|
|
1122
1126
|
name: 'month',
|
|
1123
1127
|
type: 'int',
|
|
1128
|
+
display_name: 'Month',
|
|
1124
1129
|
attributes: [],
|
|
1125
1130
|
dimension: null,
|
|
1126
1131
|
},
|
|
1127
1132
|
{
|
|
1128
1133
|
name: 'year',
|
|
1129
1134
|
type: 'int',
|
|
1135
|
+
display_name: 'Year',
|
|
1130
1136
|
attributes: [],
|
|
1131
1137
|
dimension: null,
|
|
1132
1138
|
},
|
|
1133
1139
|
{
|
|
1134
1140
|
name: 'day',
|
|
1135
1141
|
type: 'int',
|
|
1142
|
+
display_name: 'Day',
|
|
1136
1143
|
attributes: [],
|
|
1137
1144
|
dimension: null,
|
|
1138
1145
|
},
|
|
@@ -1175,6 +1182,7 @@ export const mocks = {
|
|
|
1175
1182
|
{
|
|
1176
1183
|
name: 'hard_hat_id',
|
|
1177
1184
|
type: 'int',
|
|
1185
|
+
display_name: 'Hard Hat Id',
|
|
1178
1186
|
attributes: [
|
|
1179
1187
|
{
|
|
1180
1188
|
attribute_type: {
|
|
@@ -1188,24 +1196,28 @@ export const mocks = {
|
|
|
1188
1196
|
{
|
|
1189
1197
|
name: 'last_name',
|
|
1190
1198
|
type: 'string',
|
|
1199
|
+
display_name: 'Last Name',
|
|
1191
1200
|
attributes: [],
|
|
1192
1201
|
dimension: null,
|
|
1193
1202
|
},
|
|
1194
1203
|
{
|
|
1195
1204
|
name: 'first_name',
|
|
1196
1205
|
type: 'string',
|
|
1206
|
+
display_name: 'First Name',
|
|
1197
1207
|
attributes: [],
|
|
1198
1208
|
dimension: null,
|
|
1199
1209
|
},
|
|
1200
1210
|
{
|
|
1201
1211
|
name: 'title',
|
|
1202
1212
|
type: 'string',
|
|
1213
|
+
display_name: 'Title',
|
|
1203
1214
|
attributes: [],
|
|
1204
1215
|
dimension: null,
|
|
1205
1216
|
},
|
|
1206
1217
|
{
|
|
1207
1218
|
name: 'birth_date',
|
|
1208
1219
|
type: 'date',
|
|
1220
|
+
display_name: 'Birth Date',
|
|
1209
1221
|
attributes: [],
|
|
1210
1222
|
dimension: {
|
|
1211
1223
|
name: 'default.date_dim',
|
|
@@ -1218,18 +1230,21 @@ export const mocks = {
|
|
|
1218
1230
|
dimension: {
|
|
1219
1231
|
name: 'default.date_dim',
|
|
1220
1232
|
},
|
|
1233
|
+
display_name: 'Hire Date',
|
|
1221
1234
|
},
|
|
1222
1235
|
{
|
|
1223
1236
|
name: 'address',
|
|
1224
1237
|
type: 'string',
|
|
1225
1238
|
attributes: [],
|
|
1226
1239
|
dimension: null,
|
|
1240
|
+
display_name: 'Address',
|
|
1227
1241
|
},
|
|
1228
1242
|
{
|
|
1229
1243
|
name: 'city',
|
|
1230
1244
|
type: 'string',
|
|
1231
1245
|
attributes: [],
|
|
1232
1246
|
dimension: null,
|
|
1247
|
+
display_name: 'City',
|
|
1233
1248
|
},
|
|
1234
1249
|
{
|
|
1235
1250
|
name: 'state',
|
|
@@ -1238,37 +1253,35 @@ export const mocks = {
|
|
|
1238
1253
|
dimension: {
|
|
1239
1254
|
name: 'default.us_state',
|
|
1240
1255
|
},
|
|
1256
|
+
display_name: 'State',
|
|
1241
1257
|
},
|
|
1242
1258
|
{
|
|
1243
1259
|
name: 'postal_code',
|
|
1244
1260
|
type: 'string',
|
|
1245
1261
|
attributes: [],
|
|
1246
1262
|
dimension: null,
|
|
1263
|
+
display_name: 'Postal Code',
|
|
1247
1264
|
},
|
|
1248
1265
|
{
|
|
1249
1266
|
name: 'country',
|
|
1250
1267
|
type: 'string',
|
|
1251
1268
|
attributes: [],
|
|
1252
1269
|
dimension: null,
|
|
1270
|
+
display_name: 'Country',
|
|
1253
1271
|
},
|
|
1254
1272
|
{
|
|
1255
1273
|
name: 'manager',
|
|
1256
1274
|
type: 'int',
|
|
1257
1275
|
attributes: [],
|
|
1258
1276
|
dimension: null,
|
|
1277
|
+
display_name: 'Manager',
|
|
1259
1278
|
},
|
|
1260
1279
|
{
|
|
1261
1280
|
name: 'contractor_id',
|
|
1262
1281
|
type: 'int',
|
|
1263
1282
|
attributes: [],
|
|
1264
1283
|
dimension: null,
|
|
1265
|
-
|
|
1266
|
-
],
|
|
1267
|
-
updated_at: '2023-08-21T16:48:55.594603+00:00',
|
|
1268
|
-
materializations: [],
|
|
1269
|
-
parents: [
|
|
1270
|
-
{
|
|
1271
|
-
name: 'default.hard_hats',
|
|
1284
|
+
display_name: 'Contractor Id',
|
|
1272
1285
|
},
|
|
1273
1286
|
],
|
|
1274
1287
|
created_at: '2023-08-21T16:48:55.594537+00:00',
|
|
@@ -1302,6 +1315,7 @@ export const mocks = {
|
|
|
1302
1315
|
{
|
|
1303
1316
|
name: 'default_DOT_avg_repair_price',
|
|
1304
1317
|
type: 'double',
|
|
1318
|
+
display_name: 'Default DOT avg repair price',
|
|
1305
1319
|
attributes: [],
|
|
1306
1320
|
dimension: null,
|
|
1307
1321
|
},
|
|
@@ -1345,6 +1359,7 @@ export const mocks = {
|
|
|
1345
1359
|
{
|
|
1346
1360
|
name: 'dispatcher_id',
|
|
1347
1361
|
type: 'int',
|
|
1362
|
+
display_name: 'Dispatcher Id',
|
|
1348
1363
|
attributes: [
|
|
1349
1364
|
{
|
|
1350
1365
|
attribute_type: {
|
|
@@ -1358,12 +1373,14 @@ export const mocks = {
|
|
|
1358
1373
|
{
|
|
1359
1374
|
name: 'company_name',
|
|
1360
1375
|
type: 'string',
|
|
1376
|
+
display_name: 'Company Name',
|
|
1361
1377
|
attributes: [],
|
|
1362
1378
|
dimension: null,
|
|
1363
1379
|
},
|
|
1364
1380
|
{
|
|
1365
1381
|
name: 'phone',
|
|
1366
1382
|
type: 'string',
|
|
1383
|
+
display_name: 'Phone',
|
|
1367
1384
|
attributes: [],
|
|
1368
1385
|
dimension: null,
|
|
1369
1386
|
},
|
|
@@ -1394,4 +1411,20 @@ export const mocks = {
|
|
|
1394
1411
|
display_name: 'Default: Num Repair Orders',
|
|
1395
1412
|
},
|
|
1396
1413
|
],
|
|
1414
|
+
tags: [
|
|
1415
|
+
{
|
|
1416
|
+
description: 'Financial-related reports',
|
|
1417
|
+
display_name: 'Financial Reports',
|
|
1418
|
+
tag_metadata: {},
|
|
1419
|
+
name: 'report.financials',
|
|
1420
|
+
tag_type: 'reports',
|
|
1421
|
+
},
|
|
1422
|
+
{
|
|
1423
|
+
description: 'Forecasting reports',
|
|
1424
|
+
display_name: 'Forecasting Reports',
|
|
1425
|
+
tag_metadata: {},
|
|
1426
|
+
name: 'reports.forecasts',
|
|
1427
|
+
tag_type: 'reports',
|
|
1428
|
+
},
|
|
1429
|
+
],
|
|
1397
1430
|
};
|
package/src/styles/dag.css
CHANGED
package/src/styles/index.css
CHANGED
|
@@ -369,6 +369,7 @@ tbody th {
|
|
|
369
369
|
border-top: 1px solid #edf2f9;
|
|
370
370
|
border-bottom: 0;
|
|
371
371
|
padding: 1rem;
|
|
372
|
+
max-width: 25rem;
|
|
372
373
|
}
|
|
373
374
|
.card-inner-table td,
|
|
374
375
|
.card-inner-table th {
|
|
@@ -451,6 +452,17 @@ tbody th {
|
|
|
451
452
|
background-color: #dbafff !important;
|
|
452
453
|
color: #580076;
|
|
453
454
|
}
|
|
455
|
+
|
|
456
|
+
.node_type__blank {
|
|
457
|
+
font-family: 'Jost';
|
|
458
|
+
background-color: #ffffff !important;
|
|
459
|
+
color: #a96621;
|
|
460
|
+
}
|
|
461
|
+
.entity__tag {
|
|
462
|
+
font-family: 'Jost';
|
|
463
|
+
background-color: #afd4ff !important;
|
|
464
|
+
color: #002176;
|
|
465
|
+
}
|
|
454
466
|
.react-flow__node .node_type__cube {
|
|
455
467
|
background-color: #c2180750 !important;
|
|
456
468
|
color: #c2180750;
|
|
@@ -710,9 +722,11 @@ pre {
|
|
|
710
722
|
}
|
|
711
723
|
.menu-title a {
|
|
712
724
|
color: #7e8299;
|
|
725
|
+
cursor: pointer;
|
|
713
726
|
}
|
|
714
727
|
.menu-title a:hover {
|
|
715
728
|
color: #3f4254;
|
|
729
|
+
cursor: pointer;
|
|
716
730
|
}
|
|
717
731
|
|
|
718
732
|
.node__header,
|
|
@@ -892,7 +906,33 @@ pre {
|
|
|
892
906
|
position: absolute;
|
|
893
907
|
min-width: 210px;
|
|
894
908
|
max-width: 100%;
|
|
895
|
-
z-index:
|
|
909
|
+
z-index: 100000;
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
.centerPopover {
|
|
913
|
+
position: absolute !important;
|
|
914
|
+
top: 1%;
|
|
915
|
+
left: 25%;
|
|
916
|
+
|
|
917
|
+
padding: 1rem 1rem 0.6rem 1rem !important;
|
|
918
|
+
margin-top: 1rem;
|
|
919
|
+
border-radius: 10px;
|
|
920
|
+
text-align: left;
|
|
921
|
+
position: absolute;
|
|
922
|
+
min-width: 210px;
|
|
923
|
+
max-width: 100%;
|
|
924
|
+
z-index: 100000;
|
|
925
|
+
background-color: #fff;
|
|
926
|
+
background-clip: padding-box;
|
|
927
|
+
border: 1px solid rgba(0, 0, 0, 0.2);
|
|
928
|
+
-webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
|
|
929
|
+
box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
|
|
930
|
+
outline: 0;
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
.centerPopover h2 {
|
|
934
|
+
margin-top: 0;
|
|
935
|
+
margin-bottom: 1rem;
|
|
896
936
|
}
|
|
897
937
|
|
|
898
938
|
.select-name {
|
|
@@ -993,3 +1033,51 @@ pre {
|
|
|
993
1033
|
.deleteNode {
|
|
994
1034
|
display: inline-block;
|
|
995
1035
|
}
|
|
1036
|
+
|
|
1037
|
+
.tag_value {
|
|
1038
|
+
color: #5c3b8f;
|
|
1039
|
+
background-color: #5c3b8f25;
|
|
1040
|
+
margin: 0.25rem;
|
|
1041
|
+
font-size: 100%;
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1044
|
+
.tag_value:hover {
|
|
1045
|
+
background-color: #5c3b8f50;
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1048
|
+
.modal-backdrop.in {
|
|
1049
|
+
filter: alpha(opacity=50);
|
|
1050
|
+
opacity: 0.5;
|
|
1051
|
+
}
|
|
1052
|
+
.modal-backdrop.fade {
|
|
1053
|
+
filter: alpha(opacity=0);
|
|
1054
|
+
opacity: 0;
|
|
1055
|
+
}
|
|
1056
|
+
.fade.in {
|
|
1057
|
+
opacity: 1;
|
|
1058
|
+
}
|
|
1059
|
+
.modal-backdrop {
|
|
1060
|
+
z-index: 1 !important;
|
|
1061
|
+
}
|
|
1062
|
+
.modal-backdrop {
|
|
1063
|
+
z-index: 1;
|
|
1064
|
+
}
|
|
1065
|
+
.modal-backdrop {
|
|
1066
|
+
position: fixed;
|
|
1067
|
+
top: 0;
|
|
1068
|
+
right: 0;
|
|
1069
|
+
bottom: 0;
|
|
1070
|
+
left: 0;
|
|
1071
|
+
z-index: 1;
|
|
1072
|
+
background-color: #00000075;
|
|
1073
|
+
}
|
|
1074
|
+
.fade {
|
|
1075
|
+
opacity: 0;
|
|
1076
|
+
-webkit-transition: opacity 0.15s linear;
|
|
1077
|
+
-o-transition: opacity 0.15s linear;
|
|
1078
|
+
transition: opacity 0.15s linear;
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
.partitionLink:hover {
|
|
1082
|
+
text-decoration: none;
|
|
1083
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
.lds-ring {
|
|
2
|
+
display: inline-block;
|
|
3
|
+
position: relative;
|
|
4
|
+
width: 25px;
|
|
5
|
+
height: 25px;
|
|
6
|
+
}
|
|
7
|
+
.lds-ring div {
|
|
8
|
+
box-sizing: border-box;
|
|
9
|
+
display: block;
|
|
10
|
+
position: absolute;
|
|
11
|
+
width: 25px;
|
|
12
|
+
height: 25px;
|
|
13
|
+
border: 8px solid #fff;
|
|
14
|
+
border-radius: 50%;
|
|
15
|
+
animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;
|
|
16
|
+
border-color: #fff transparent transparent transparent;
|
|
17
|
+
}
|
|
18
|
+
.lds-ring div:nth-child(1) {
|
|
19
|
+
animation-delay: -0.45s;
|
|
20
|
+
}
|
|
21
|
+
.lds-ring div:nth-child(2) {
|
|
22
|
+
animation-delay: -0.3s;
|
|
23
|
+
}
|
|
24
|
+
.lds-ring div:nth-child(3) {
|
|
25
|
+
animation-delay: -0.15s;
|
|
26
|
+
}
|
|
27
|
+
@keyframes lds-ring {
|
|
28
|
+
0% {
|
|
29
|
+
transform: rotate(0deg);
|
|
30
|
+
}
|
|
31
|
+
100% {
|
|
32
|
+
transform: rotate(360deg);
|
|
33
|
+
}
|
|
34
|
+
}
|