@fibery/views 13.0.2 → 14.0.0
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/lib/views.js +87 -25
- package/package.json +6 -6
- package/src/index.js +228 -0
package/lib/views.js
CHANGED
|
@@ -1292,10 +1292,7 @@ const enableHideWhenEmptyForCheckedUnits = view => {
|
|
|
1292
1292
|
});
|
|
1293
1293
|
};
|
|
1294
1294
|
|
|
1295
|
-
const
|
|
1296
|
-
if (!axis) {
|
|
1297
|
-
return axis;
|
|
1298
|
-
}
|
|
1295
|
+
const visitAxisSingle = (axis, visitor) => {
|
|
1299
1296
|
const fromType = ___default["default"].get(axis, ["query", "q/from"]);
|
|
1300
1297
|
const firstOrNull = x => ___default["default"].first(x) || null;
|
|
1301
1298
|
const axisResult = {
|
|
@@ -1314,6 +1311,23 @@ const visitAxis = (axis, visitor) => {
|
|
|
1314
1311
|
}
|
|
1315
1312
|
return axisResult;
|
|
1316
1313
|
};
|
|
1314
|
+
const visitAxis = (axis, visitor) => {
|
|
1315
|
+
if (axis && axis.hasOwnProperty("query")) {
|
|
1316
|
+
return visitAxisSingle(axis, visitor);
|
|
1317
|
+
}
|
|
1318
|
+
if (axis && axis.hasOwnProperty("enums")) {
|
|
1319
|
+
const axisNew = immutableUpdate__default["default"](axis, {
|
|
1320
|
+
enums: {
|
|
1321
|
+
$apply: enums => visitor.visitEnums(enums)
|
|
1322
|
+
}
|
|
1323
|
+
});
|
|
1324
|
+
const {
|
|
1325
|
+
enums
|
|
1326
|
+
} = axisNew;
|
|
1327
|
+
return enums ? axisNew : null;
|
|
1328
|
+
}
|
|
1329
|
+
return axis;
|
|
1330
|
+
};
|
|
1317
1331
|
const visitView = (view, visitor) => immutableUpdate__default["default"](view, {
|
|
1318
1332
|
"fibery/meta": {
|
|
1319
1333
|
y: {
|
|
@@ -1403,20 +1417,40 @@ const visitView = (view, visitor) => immutableUpdate__default["default"](view, {
|
|
|
1403
1417
|
}
|
|
1404
1418
|
});
|
|
1405
1419
|
const replaceNamesWithIdsInTimelineView = (schema, view) => {
|
|
1406
|
-
|
|
1420
|
+
const visitor = {
|
|
1407
1421
|
visitQueryExpression: query => replaceNamesWithIdsInQueryExpression(schema, query),
|
|
1408
1422
|
visitFilter: (fromType, expression) => replaceNamesWithIdsInFilter(schema, fromType, expression),
|
|
1409
|
-
visitExpression: (fromType, expression) => replaceNamesWithIdsInExpression(schema, fromType, expression)
|
|
1410
|
-
|
|
1423
|
+
visitExpression: (fromType, expression) => replaceNamesWithIdsInExpression(schema, fromType, expression),
|
|
1424
|
+
visitEnums: enums => ___default["default"].entries(enums).reduce((result, [type, axis]) => {
|
|
1425
|
+
if (schema.typeObjectsByName.hasOwnProperty(type)) {
|
|
1426
|
+
const typeObject = schema.typeObjectsByName[type];
|
|
1427
|
+
result[typeObject.id] = visitAxisSingle(axis, visitor);
|
|
1428
|
+
} else {
|
|
1429
|
+
result[type] = axis;
|
|
1430
|
+
}
|
|
1431
|
+
return result;
|
|
1432
|
+
}, {})
|
|
1433
|
+
};
|
|
1434
|
+
return visitView(view, visitor);
|
|
1411
1435
|
};
|
|
1412
1436
|
const replaceIdsWithNamesInTimelineView = (schema, view) => {
|
|
1413
|
-
|
|
1437
|
+
const visitor = {
|
|
1414
1438
|
visitQueryExpression: query => replaceIdsWithNamesInQueryExpression(schema, query),
|
|
1415
1439
|
visitFilter: (fromType, expression) => replaceIdsWithNamesInFilter(schema, fromType, expression),
|
|
1416
|
-
visitExpression: (fromType, expression) => replaceIdsWithNamesInExpression(schema, fromType, expression)
|
|
1417
|
-
|
|
1440
|
+
visitExpression: (fromType, expression) => replaceIdsWithNamesInExpression(schema, fromType, expression),
|
|
1441
|
+
visitEnums: enums => ___default["default"].entries(enums).reduce((result, [typeId, axis]) => {
|
|
1442
|
+
if (schema.typeObjectsById.hasOwnProperty(typeId)) {
|
|
1443
|
+
const typeObject = schema.typeObjectsById[typeId];
|
|
1444
|
+
result[typeObject.name] = visitAxisSingle(axis, visitor);
|
|
1445
|
+
} else {
|
|
1446
|
+
result[typeId] = axis;
|
|
1447
|
+
}
|
|
1448
|
+
return result;
|
|
1449
|
+
}, {})
|
|
1450
|
+
};
|
|
1451
|
+
return visitView(view, visitor);
|
|
1418
1452
|
};
|
|
1419
|
-
const ensureAxisAndItemExpressionInvariant = view => {
|
|
1453
|
+
const ensureAxisAndItemExpressionInvariant = (view, canGroupMetaItem) => {
|
|
1420
1454
|
const actions = [];
|
|
1421
1455
|
const y = ___default["default"].get(view, ["fibery/meta", "y"]);
|
|
1422
1456
|
const yQuery = ___default["default"].get(view, ["fibery/meta", "y", "query"]);
|
|
@@ -1429,10 +1463,11 @@ const ensureAxisAndItemExpressionInvariant = view => {
|
|
|
1429
1463
|
const resetActions = items.map(item => () => item.yExpression = null);
|
|
1430
1464
|
actions.push(...resetActions);
|
|
1431
1465
|
}
|
|
1432
|
-
|
|
1466
|
+
const filteredMetaItems = items.filter(canGroupMetaItem);
|
|
1467
|
+
if (y !== null && ___default["default"].some(filteredMetaItems, ({
|
|
1433
1468
|
yExpression
|
|
1434
1469
|
}) => yExpression === null)) {
|
|
1435
|
-
const resetActions =
|
|
1470
|
+
const resetActions = filteredMetaItems.map(item => () => item.yExpression = null);
|
|
1436
1471
|
actions.push(...resetActions);
|
|
1437
1472
|
actions.push(() => ___default["default"].set(view, ["fibery/meta", "y"], null));
|
|
1438
1473
|
}
|
|
@@ -1442,13 +1477,27 @@ const ensureAxisAndItemExpressionInvariant = view => {
|
|
|
1442
1477
|
actions.forEach(action => action());
|
|
1443
1478
|
return view;
|
|
1444
1479
|
};
|
|
1445
|
-
const deleteExpressionWithNotFoundFieldsOrTypesInTimelineView = (schema, view, ensureAxisInvariant = true) => {
|
|
1446
|
-
const
|
|
1480
|
+
const deleteExpressionWithNotFoundFieldsOrTypesInTimelineView = (schema, view, ensureAxisInvariant, canGroupMetaItem = () => true) => {
|
|
1481
|
+
const visitor = {
|
|
1447
1482
|
visitQueryExpression: queryExpression => deleteExpressionWithNotFoundFieldsOrTypesInQueryExpression(schema, queryExpression),
|
|
1448
1483
|
visitFilter: (fromType, expression) => deleteExpressionWithNotFoundFieldsOrTypesInFilter(schema, fromType, expression),
|
|
1449
|
-
visitExpression: (fromType, expression) => deleteExpressionWithNotFoundFieldsOrTypesInExpression(schema, fromType, expression)
|
|
1450
|
-
|
|
1451
|
-
|
|
1484
|
+
visitExpression: (fromType, expression) => deleteExpressionWithNotFoundFieldsOrTypesInExpression(schema, fromType, expression),
|
|
1485
|
+
visitEnums: enums => {
|
|
1486
|
+
const enumsNew = ___default["default"].entries(enums).reduce((result, [type, axis]) => {
|
|
1487
|
+
if (schema.typeObjectsByName.hasOwnProperty(type)) {
|
|
1488
|
+
const typeObject = schema.typeObjectsByName[type];
|
|
1489
|
+
const axisResult = visitAxisSingle(axis, visitor);
|
|
1490
|
+
if (axisResult) {
|
|
1491
|
+
result[typeObject.name] = axisResult;
|
|
1492
|
+
}
|
|
1493
|
+
}
|
|
1494
|
+
return result;
|
|
1495
|
+
}, {});
|
|
1496
|
+
return ___default["default"].isEmpty(enumsNew) ? null : enumsNew;
|
|
1497
|
+
}
|
|
1498
|
+
};
|
|
1499
|
+
const viewNew = visitView(view, visitor);
|
|
1500
|
+
return ensureAxisInvariant ? ensureAxisAndItemExpressionInvariant(viewNew, canGroupMetaItem) : viewNew;
|
|
1452
1501
|
};
|
|
1453
1502
|
const fixUserSelectedUnitsInTimelineView = (schema, view, {
|
|
1454
1503
|
unitDefinitions,
|
|
@@ -1461,21 +1510,24 @@ const fixUserSelectedUnitsInTimelineView = (schema, view, {
|
|
|
1461
1510
|
visitViewUnit: (fromType, unit, units) => fixViewUnit(schema, fromType, unit, units, {
|
|
1462
1511
|
unitDefinitions,
|
|
1463
1512
|
getDefaultUnitTypeForField
|
|
1464
|
-
})
|
|
1513
|
+
}),
|
|
1514
|
+
visitEnums: enums => enums
|
|
1465
1515
|
});
|
|
1466
1516
|
};
|
|
1467
1517
|
const fixContextExpressionWithBrokenPath$1 = (schema, view, defaultContextExpression) => visitView(view, {
|
|
1468
1518
|
visitExpression: (_fromType, expression) => expression,
|
|
1469
1519
|
visitFilter: (_fromType, filter) => filter,
|
|
1470
1520
|
visitQueryExpression: query => query,
|
|
1471
|
-
visitContextExpression: (fromType, expression) => resetContextExpressionIfBroken(schema, fromType, expression, defaultContextExpression)
|
|
1521
|
+
visitContextExpression: (fromType, expression) => resetContextExpressionIfBroken(schema, fromType, expression, defaultContextExpression),
|
|
1522
|
+
visitEnums: enums => enums
|
|
1472
1523
|
});
|
|
1473
1524
|
const collectGarbage$1 = view => {
|
|
1474
1525
|
return visitView(view, {
|
|
1475
1526
|
visitQueryExpression: query => query,
|
|
1476
1527
|
visitFilter: (_fromType, filter) => filter,
|
|
1477
1528
|
visitExpression: (_fromType, expression) => expression,
|
|
1478
|
-
visitViewUnit: (_fromType, unit) => unit.checked ? unit : REMOVE
|
|
1529
|
+
visitViewUnit: (_fromType, unit) => unit.checked ? unit : REMOVE,
|
|
1530
|
+
visitEnums: enums => enums
|
|
1479
1531
|
});
|
|
1480
1532
|
};
|
|
1481
1533
|
const enableHideWhenEmptyForCheckedEditableUnits = view => {
|
|
@@ -1484,8 +1536,8 @@ const enableHideWhenEmptyForCheckedEditableUnits = view => {
|
|
|
1484
1536
|
visitGroupByExpression: groupBy => groupBy,
|
|
1485
1537
|
visitExpression: (_fromType, expression) => expression,
|
|
1486
1538
|
visitFilter: (_fromType, filter) => filter,
|
|
1487
|
-
|
|
1488
|
-
|
|
1539
|
+
visitViewUnit: (_fromType, unit) => enableHideWhenEmptyForCheckedEditableUnit(unit),
|
|
1540
|
+
visitEnums: enums => enums
|
|
1489
1541
|
});
|
|
1490
1542
|
};
|
|
1491
1543
|
|
|
@@ -1498,7 +1550,11 @@ const deleteExpressionWithNotFoundFieldsOrTypesInView = (schema, view, ensureAxi
|
|
|
1498
1550
|
case "table":
|
|
1499
1551
|
return deleteExpressionWithNotFoundFieldsOrTypesInSmartFolder(schema, view);
|
|
1500
1552
|
case "timeline":
|
|
1501
|
-
return deleteExpressionWithNotFoundFieldsOrTypesInTimelineView(schema, view, ensureAxisInvariant);
|
|
1553
|
+
return deleteExpressionWithNotFoundFieldsOrTypesInTimelineView(schema, view, ensureAxisInvariant, () => true);
|
|
1554
|
+
case "gantt":
|
|
1555
|
+
return deleteExpressionWithNotFoundFieldsOrTypesInTimelineView(schema, view, ensureAxisInvariant,
|
|
1556
|
+
// Only hierarchy top level meta items can be grouped
|
|
1557
|
+
metaItem => !metaItem.groupBy);
|
|
1502
1558
|
case "calendar":
|
|
1503
1559
|
return deleteExpressionWithNotFoundFieldsOrTypesInCalendarView(schema, view);
|
|
1504
1560
|
case "feed":
|
|
@@ -1529,6 +1585,7 @@ const fixUserSelectedUnits = (schema, view, {
|
|
|
1529
1585
|
getDefaultUnitTypeForField
|
|
1530
1586
|
});
|
|
1531
1587
|
case "timeline":
|
|
1588
|
+
case "gantt":
|
|
1532
1589
|
return fixUserSelectedUnitsInTimelineView(schema, view, {
|
|
1533
1590
|
unitDefinitions,
|
|
1534
1591
|
getDefaultUnitTypeForField
|
|
@@ -1561,6 +1618,7 @@ const fixContextExpressionWithBrokenPath = (schema, view, defaultContextExpressi
|
|
|
1561
1618
|
case "table":
|
|
1562
1619
|
return fixContextExpressionWithBrokenPath$2(schema, view, defaultContextExpression);
|
|
1563
1620
|
case "timeline":
|
|
1621
|
+
case "gantt":
|
|
1564
1622
|
return fixContextExpressionWithBrokenPath$1(schema, view, defaultContextExpression);
|
|
1565
1623
|
case "calendar":
|
|
1566
1624
|
return fixContextExpressionWithBrokenPath$5(schema, view, defaultContextExpression);
|
|
@@ -1597,6 +1655,7 @@ const collectGarbage = (schema, view) => {
|
|
|
1597
1655
|
case "table":
|
|
1598
1656
|
return deleteRemoved(collectGarbage$2(view));
|
|
1599
1657
|
case "timeline":
|
|
1658
|
+
case "gantt":
|
|
1600
1659
|
return deleteRemoved(collectGarbage$1(view));
|
|
1601
1660
|
case "calendar":
|
|
1602
1661
|
return deleteRemoved(collectGarbage$5(view));
|
|
@@ -1617,6 +1676,7 @@ const replaceNamesWithIdsInView = (schema, view) => {
|
|
|
1617
1676
|
case "table":
|
|
1618
1677
|
return replaceNamesWithIdsInSmartFolder(schema, view);
|
|
1619
1678
|
case "timeline":
|
|
1679
|
+
case "gantt":
|
|
1620
1680
|
return replaceNamesWithIdsInTimelineView(schema, view);
|
|
1621
1681
|
case "calendar":
|
|
1622
1682
|
return replaceNamesWithIdsInCalendarView(schema, view);
|
|
@@ -1639,6 +1699,7 @@ const replaceIdsWithNamesInView = (schema, view) => {
|
|
|
1639
1699
|
case "table":
|
|
1640
1700
|
return replaceIdsWithNamesInSmartFolder(schema, view);
|
|
1641
1701
|
case "timeline":
|
|
1702
|
+
case "gantt":
|
|
1642
1703
|
return replaceIdsWithNamesInTimelineView(schema, view);
|
|
1643
1704
|
case "calendar":
|
|
1644
1705
|
return replaceIdsWithNamesInCalendarView(schema, view);
|
|
@@ -1662,7 +1723,7 @@ const getViewCardTypes = ({
|
|
|
1662
1723
|
}
|
|
1663
1724
|
}) => type);
|
|
1664
1725
|
const migrateHideWhenEmptyToUnitsLevel = view => {
|
|
1665
|
-
const viewTypesToTransform = ["board", "list", "timeline", "calendar", "feed", "map"];
|
|
1726
|
+
const viewTypesToTransform = ["board", "list", "timeline", "gantt", "calendar", "feed", "map"];
|
|
1666
1727
|
const viewType = view["fibery/type"];
|
|
1667
1728
|
if (!viewTypesToTransform.includes(viewType)) {
|
|
1668
1729
|
return view;
|
|
@@ -1687,6 +1748,7 @@ const migrateHideWhenEmptyToUnitsLevel = view => {
|
|
|
1687
1748
|
case "list":
|
|
1688
1749
|
return enableHideWhenEmptyForCheckedUnits(result);
|
|
1689
1750
|
case "timeline":
|
|
1751
|
+
case "gantt":
|
|
1690
1752
|
return enableHideWhenEmptyForCheckedEditableUnits(result);
|
|
1691
1753
|
case "calendar":
|
|
1692
1754
|
return enableHideWhenEmptyForCheckedUnits$3(result);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fibery/views",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "14.0.0",
|
|
4
4
|
"description": "Operations on view objects",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"author": "Fibery",
|
|
@@ -19,13 +19,13 @@
|
|
|
19
19
|
"lodash": "4.17.21",
|
|
20
20
|
"microbundle": "0.15.1",
|
|
21
21
|
"@fibery/babel-preset": "7.4.0",
|
|
22
|
-
"@fibery/
|
|
23
|
-
"@fibery/schema": "10.2.
|
|
24
|
-
"@fibery/
|
|
22
|
+
"@fibery/expression-utils": "9.2.0",
|
|
23
|
+
"@fibery/schema": "10.2.7",
|
|
24
|
+
"@fibery/eslint-config": "8.6.1"
|
|
25
25
|
},
|
|
26
26
|
"peerDependencies": {
|
|
27
|
-
"@fibery/expression-utils": "^9.
|
|
28
|
-
"@fibery/schema": "^10.2.
|
|
27
|
+
"@fibery/expression-utils": "^9.2.0",
|
|
28
|
+
"@fibery/schema": "^10.2.7",
|
|
29
29
|
"immutability-helper": "^2.4.0",
|
|
30
30
|
"lodash": "^4.17.21"
|
|
31
31
|
},
|
package/src/index.js
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import immutableUpdate from "immutability-helper";
|
|
2
|
+
import _ from "lodash";
|
|
3
|
+
import * as board from "./private/board";
|
|
4
|
+
import * as calendar from "./private/calendar";
|
|
5
|
+
import * as feed from "./private/feed";
|
|
6
|
+
import * as form from "./private/form";
|
|
7
|
+
import * as map from "./private/map";
|
|
8
|
+
import * as smartfolder from "./private/smart-folder";
|
|
9
|
+
import * as timeline from "./private/timeline";
|
|
10
|
+
import {REMOVE} from "./private/utils";
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
deleteExpressionWithNotFoundFieldsOrTypesInSmartFolder,
|
|
14
|
+
replaceIdsWithNamesInSmartFolder,
|
|
15
|
+
replaceNamesWithIdsInSmartFolder,
|
|
16
|
+
} from "./private/smart-folder";
|
|
17
|
+
|
|
18
|
+
export const deleteExpressionWithNotFoundFieldsOrTypesInView = (schema, view, ensureAxisInvariant = true) => {
|
|
19
|
+
switch (view["fibery/type"]) {
|
|
20
|
+
case "board":
|
|
21
|
+
return board.deleteExpressionWithNotFoundOrInvalidFieldsOrTypesInBoardView(schema, view, ensureAxisInvariant);
|
|
22
|
+
case "list":
|
|
23
|
+
case "grid":
|
|
24
|
+
case "table":
|
|
25
|
+
return smartfolder.deleteExpressionWithNotFoundFieldsOrTypesInSmartFolder(schema, view);
|
|
26
|
+
case "timeline":
|
|
27
|
+
return timeline.deleteExpressionWithNotFoundFieldsOrTypesInTimelineView(
|
|
28
|
+
schema,
|
|
29
|
+
view,
|
|
30
|
+
ensureAxisInvariant,
|
|
31
|
+
() => true
|
|
32
|
+
);
|
|
33
|
+
case "gantt":
|
|
34
|
+
return timeline.deleteExpressionWithNotFoundFieldsOrTypesInTimelineView(
|
|
35
|
+
schema,
|
|
36
|
+
view,
|
|
37
|
+
ensureAxisInvariant,
|
|
38
|
+
// Only hierarchy top level meta items can be grouped
|
|
39
|
+
(metaItem) => !metaItem.groupBy
|
|
40
|
+
);
|
|
41
|
+
case "calendar":
|
|
42
|
+
return calendar.deleteExpressionWithNotFoundFieldsOrTypesInCalendarView(schema, view);
|
|
43
|
+
case "feed":
|
|
44
|
+
return feed.deleteExpressionWithNotFoundFieldsOrTypesInFeedView(schema, view);
|
|
45
|
+
case "form":
|
|
46
|
+
return form.deleteExpressionWithNotFoundFieldsOrTypesInFormView(schema, view);
|
|
47
|
+
case "map":
|
|
48
|
+
return map.deleteExpressionWithNotFoundFieldsOrTypesInMapView(schema, view);
|
|
49
|
+
default:
|
|
50
|
+
return view;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export const fixUserSelectedUnits = (schema, view, {unitDefinitions, getDefaultUnitTypeForField}) => {
|
|
55
|
+
switch (view["fibery/type"]) {
|
|
56
|
+
case "board":
|
|
57
|
+
return board.fixUserSelectedUnitsInBoardView(schema, view, {unitDefinitions, getDefaultUnitTypeForField});
|
|
58
|
+
case "list":
|
|
59
|
+
case "grid":
|
|
60
|
+
case "table":
|
|
61
|
+
return smartfolder.fixUserSelectedUnitsInSmartFolder(schema, view, {unitDefinitions, getDefaultUnitTypeForField});
|
|
62
|
+
case "timeline":
|
|
63
|
+
case "gantt":
|
|
64
|
+
return timeline.fixUserSelectedUnitsInTimelineView(schema, view, {unitDefinitions, getDefaultUnitTypeForField});
|
|
65
|
+
case "calendar":
|
|
66
|
+
return calendar.fixUserSelectedUnitsInCalendarView(schema, view, {unitDefinitions, getDefaultUnitTypeForField});
|
|
67
|
+
case "feed":
|
|
68
|
+
return feed.fixUserSelectedUnitsInFeedView(schema, view, {unitDefinitions, getDefaultUnitTypeForField});
|
|
69
|
+
case "map":
|
|
70
|
+
return map.fixUserSelectedUnitsInMapView(schema, view, {unitDefinitions, getDefaultUnitTypeForField});
|
|
71
|
+
default:
|
|
72
|
+
return view;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export const fixContextExpressionWithBrokenPath = (schema, view, defaultContextExpression) => {
|
|
77
|
+
switch (view["fibery/type"]) {
|
|
78
|
+
case "board":
|
|
79
|
+
return board.fixContextExpressionWithBrokenPath(schema, view, defaultContextExpression);
|
|
80
|
+
case "list":
|
|
81
|
+
case "grid":
|
|
82
|
+
case "table":
|
|
83
|
+
return smartfolder.fixContextExpressionWithBrokenPath(schema, view, defaultContextExpression);
|
|
84
|
+
case "timeline":
|
|
85
|
+
case "gantt":
|
|
86
|
+
return timeline.fixContextExpressionWithBrokenPath(schema, view, defaultContextExpression);
|
|
87
|
+
case "calendar":
|
|
88
|
+
return calendar.fixContextExpressionWithBrokenPath(schema, view, defaultContextExpression);
|
|
89
|
+
case "feed":
|
|
90
|
+
return feed.fixContextExpressionWithBrokenPath(schema, view, defaultContextExpression);
|
|
91
|
+
case "map":
|
|
92
|
+
return map.fixContextExpressionWithBrokenPath(schema, view, defaultContextExpression);
|
|
93
|
+
default:
|
|
94
|
+
return view;
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Removes garbage from view's meta to reduce the size.
|
|
100
|
+
*/
|
|
101
|
+
export const collectGarbage = (schema, view) => {
|
|
102
|
+
const deleteRemoved = (x) => {
|
|
103
|
+
if (Array.isArray(x)) {
|
|
104
|
+
return x.map(deleteRemoved).filter((y) => y !== REMOVE);
|
|
105
|
+
}
|
|
106
|
+
if (typeof x === "object" && x !== null) {
|
|
107
|
+
let tmp = Object.entries(x);
|
|
108
|
+
tmp = tmp.map((e) => [e[0], deleteRemoved(e[1])]);
|
|
109
|
+
tmp = tmp.filter((e) => e[1] !== REMOVE);
|
|
110
|
+
return Object.fromEntries(tmp);
|
|
111
|
+
}
|
|
112
|
+
return x;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
switch (view["fibery/type"]) {
|
|
116
|
+
case "board":
|
|
117
|
+
return deleteRemoved(board.collectGarbage(view));
|
|
118
|
+
case "list":
|
|
119
|
+
case "grid":
|
|
120
|
+
case "table":
|
|
121
|
+
return deleteRemoved(smartfolder.collectGarbage(view));
|
|
122
|
+
case "timeline":
|
|
123
|
+
case "gantt":
|
|
124
|
+
return deleteRemoved(timeline.collectGarbage(view));
|
|
125
|
+
case "calendar":
|
|
126
|
+
return deleteRemoved(calendar.collectGarbage(view));
|
|
127
|
+
case "feed":
|
|
128
|
+
return deleteRemoved(feed.collectGarbage(view));
|
|
129
|
+
case "map":
|
|
130
|
+
return deleteRemoved(map.collectGarbage(view));
|
|
131
|
+
default:
|
|
132
|
+
return view;
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
export const replaceNamesWithIdsInView = (schema, view) => {
|
|
137
|
+
switch (view["fibery/type"]) {
|
|
138
|
+
case "board":
|
|
139
|
+
return board.replaceNamesWithIdsInBoardView(schema, view);
|
|
140
|
+
case "list":
|
|
141
|
+
case "grid":
|
|
142
|
+
case "table":
|
|
143
|
+
return smartfolder.replaceNamesWithIdsInSmartFolder(schema, view);
|
|
144
|
+
case "timeline":
|
|
145
|
+
case "gantt":
|
|
146
|
+
return timeline.replaceNamesWithIdsInTimelineView(schema, view);
|
|
147
|
+
case "calendar":
|
|
148
|
+
return calendar.replaceNamesWithIdsInCalendarView(schema, view);
|
|
149
|
+
case "feed":
|
|
150
|
+
return feed.replaceNamesWithIdsInFeedView(schema, view);
|
|
151
|
+
case "form":
|
|
152
|
+
return form.replaceNamesWithIdsInFormView(schema, view);
|
|
153
|
+
case "map":
|
|
154
|
+
return map.replaceNamesWithIdsInMapView(schema, view);
|
|
155
|
+
default:
|
|
156
|
+
return view;
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
export const replaceIdsWithNamesInView = (schema, view) => {
|
|
161
|
+
switch (view["fibery/type"]) {
|
|
162
|
+
case "board":
|
|
163
|
+
return board.replaceIdsWithNamesInBoardView(schema, view);
|
|
164
|
+
case "list":
|
|
165
|
+
case "grid":
|
|
166
|
+
case "table":
|
|
167
|
+
return smartfolder.replaceIdsWithNamesInSmartFolder(schema, view);
|
|
168
|
+
case "timeline":
|
|
169
|
+
case "gantt":
|
|
170
|
+
return timeline.replaceIdsWithNamesInTimelineView(schema, view);
|
|
171
|
+
case "calendar":
|
|
172
|
+
return calendar.replaceIdsWithNamesInCalendarView(schema, view);
|
|
173
|
+
case "feed":
|
|
174
|
+
return feed.replaceIdsWithNamesInFeedView(schema, view);
|
|
175
|
+
case "form":
|
|
176
|
+
return form.replaceIdsWithNamesInFormView(schema, view);
|
|
177
|
+
case "map":
|
|
178
|
+
return map.replaceIdsWithNamesInMapView(schema, view);
|
|
179
|
+
default:
|
|
180
|
+
return view;
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
export const getViewCardTypes = ({"fibery/meta": {items}}) => items.map(({query: {"q/from": type}}) => type);
|
|
185
|
+
|
|
186
|
+
export const migrateHideWhenEmptyToUnitsLevel = (view) => {
|
|
187
|
+
const viewTypesToTransform = ["board", "list", "timeline", "gantt", "calendar", "feed", "map"];
|
|
188
|
+
const viewType = view["fibery/type"];
|
|
189
|
+
|
|
190
|
+
if (!viewTypesToTransform.includes(viewType)) {
|
|
191
|
+
return view;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
const showEmptyUnitValues = _.get(view, ["fibery/meta", "showEmptyUnitValues"]);
|
|
195
|
+
if (showEmptyUnitValues === undefined) {
|
|
196
|
+
return view;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
let result = immutableUpdate(view, {
|
|
200
|
+
"fibery/meta": {
|
|
201
|
+
$apply: (x) => _.omit(x, "showEmptyUnitValues"),
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
if (showEmptyUnitValues === true) {
|
|
206
|
+
return result;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
switch (result["fibery/type"]) {
|
|
210
|
+
case "board":
|
|
211
|
+
result = board.enableHideWhenEmptyForCovers(result);
|
|
212
|
+
result = board.enableHideWhenEmptyForCheckedEditableUnits(result);
|
|
213
|
+
return result;
|
|
214
|
+
case "list":
|
|
215
|
+
return smartfolder.enableHideWhenEmptyForCheckedUnits(result);
|
|
216
|
+
case "timeline":
|
|
217
|
+
case "gantt":
|
|
218
|
+
return timeline.enableHideWhenEmptyForCheckedEditableUnits(result);
|
|
219
|
+
case "calendar":
|
|
220
|
+
return calendar.enableHideWhenEmptyForCheckedUnits(result);
|
|
221
|
+
case "feed":
|
|
222
|
+
return feed.enableHideWhenEmptyForCheckedUnits(result);
|
|
223
|
+
case "map":
|
|
224
|
+
return map.enableHideWhenEmptyForCheckedUnits(result);
|
|
225
|
+
default:
|
|
226
|
+
return result;
|
|
227
|
+
}
|
|
228
|
+
};
|