selectors.ts 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. /*
  2. * <<
  3. * Davinci
  4. * ==
  5. * Copyright (C) 2016 - 2017 EDP
  6. * ==
  7. * Licensed under the Apache License, Version 2.0 (the "License");
  8. * you may not use this file except in compliance with the License.
  9. * You may obtain a copy of the License at
  10. *
  11. * http://www.apache.org/licenses/LICENSE-2.0
  12. *
  13. * Unless required by applicable law or agreed to in writing, software
  14. * distributed under the License is distributed on an "AS IS" BASIS,
  15. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  16. * See the License for the specific language governing permissions and
  17. * limitations under the License.
  18. * >>
  19. */
  20. import { createSelector } from 'reselect'
  21. import { IDashboardState } from './types'
  22. import { IWidgetState } from '../Widget/types'
  23. import { IViewState } from '../View/types'
  24. const selectDashboard = (state: { dashboard: IDashboardState }) =>
  25. state.dashboard
  26. const selectWidget = (state: { widget: IWidgetState }) => state.widget
  27. const selectFormedViews = (state: { view: IViewState }) =>
  28. state.view.formedViews
  29. const selectItemId = (_, itemId: number) => itemId
  30. const selectForm = (state) => state.form
  31. const makeSelectCurrentDashboard = () =>
  32. createSelector(
  33. selectDashboard,
  34. (dashboardState) => dashboardState.currentDashboard
  35. )
  36. const makeSelectCurrentDashboardLoading = () =>
  37. createSelector(
  38. selectDashboard,
  39. (dashboardState) => dashboardState.currentDashboardLoading
  40. )
  41. const makeSelectCurrentDashboardShareToken = () =>
  42. createSelector(
  43. selectDashboard,
  44. (dashboardState) => dashboardState.currentDashboardShareToken
  45. )
  46. const makeSelectCurrentDashboardAuthorizedShareToken = () =>
  47. createSelector(
  48. selectDashboard,
  49. (dashboardState) => dashboardState.currentDashboardAuthorizedShareToken
  50. )
  51. const makeSelectCurrentDashboardPasswordShareToken = () =>
  52. createSelector(
  53. selectDashboard,
  54. (dashboardState) => dashboardState.currentDashboardPasswordShareToken
  55. )
  56. const makeSelectCurrentDashboardPasswordSharePassword = () =>
  57. createSelector(
  58. selectDashboard,
  59. (dashboardState) => dashboardState.currentDashboardPasswordSharePassword
  60. )
  61. const makeSelectCurrentDashboardShareLoading = () =>
  62. createSelector(
  63. selectDashboard,
  64. (dashboardState) => dashboardState.currentDashboardShareLoading
  65. )
  66. const makeSelectSharePanel = () =>
  67. createSelector(
  68. selectDashboard,
  69. (dashboardState) => dashboardState.sharePanel
  70. )
  71. const makeSelectCurrentItems = () =>
  72. createSelector(
  73. selectDashboard,
  74. (dashboardState) => dashboardState.currentItems
  75. )
  76. const makeSelectCurrentItemsInfo = () =>
  77. createSelector(
  78. selectDashboard,
  79. (dashboardState) => dashboardState.currentItemsInfo
  80. )
  81. const makeSelectWidgets = () =>
  82. createSelector(
  83. selectWidget,
  84. (widgetState) => widgetState.widgets
  85. )
  86. const makeSelectItem = () =>
  87. createSelector(
  88. makeSelectCurrentItems(),
  89. selectItemId,
  90. (currentItems, itemId) => currentItems.find((item) => item.id === itemId)
  91. )
  92. const makeSelectItemInfo = () =>
  93. createSelector(
  94. makeSelectCurrentItemsInfo(),
  95. selectItemId,
  96. (currentItemsInfo, itemId) => currentItemsInfo[itemId]
  97. )
  98. const makeSelectItemRelatedWidget = () =>
  99. createSelector(
  100. makeSelectWidgets(),
  101. makeSelectItem(),
  102. (widgets, item) => widgets.find((w) => w.id === item.widgetId)
  103. )
  104. const makeSelectFullScreenPanelItemId = () =>
  105. createSelector(
  106. selectDashboard,
  107. (dashboardState) => dashboardState.fullScreenPanelItemId
  108. )
  109. const makeSelectCurrentLinkages = () =>
  110. createSelector(
  111. makeSelectCurrentDashboard(),
  112. makeSelectCurrentItemsInfo(),
  113. (currentDashboard, currentItemsInfo) => {
  114. if (!currentDashboard || !currentItemsInfo) {
  115. return []
  116. }
  117. const validLinkages = currentDashboard.config.linkages.filter((l) => {
  118. const { linkager, trigger } = l
  119. return currentItemsInfo[linkager[0]] && currentItemsInfo[trigger[0]]
  120. })
  121. return validLinkages
  122. }
  123. )
  124. export {
  125. selectDashboard,
  126. selectForm,
  127. makeSelectCurrentDashboard,
  128. makeSelectCurrentDashboardLoading,
  129. makeSelectCurrentItems,
  130. makeSelectCurrentItemsInfo,
  131. makeSelectWidgets,
  132. makeSelectCurrentDashboardShareToken,
  133. makeSelectCurrentDashboardAuthorizedShareToken,
  134. makeSelectCurrentDashboardShareLoading,
  135. makeSelectSharePanel,
  136. makeSelectCurrentLinkages,
  137. makeSelectItemInfo,
  138. makeSelectItemRelatedWidget,
  139. makeSelectFullScreenPanelItemId,
  140. makeSelectCurrentDashboardPasswordShareToken,
  141. makeSelectCurrentDashboardPasswordSharePassword
  142. }