selectors.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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 { initialState } from './reducer'
  22. import { DashboardItemStatus } from '../Dashboard/constants'
  23. const selectShare = (state) => state.shareDisplay || initialState
  24. const selectPropsSlideNumber = (_, slideNumber: number) => slideNumber
  25. const selectPropsLayerId = (_1, _2, layerId: number) => layerId
  26. const selectSlidesLayers = createSelector(
  27. selectShare,
  28. (shareState) => shareState.slidesLayers
  29. )
  30. const selectSlideLayersInfo = createSelector(
  31. selectShare,
  32. (shareState) => shareState.slideLayersInfo
  33. )
  34. const makeSelectTitle = () =>
  35. createSelector(
  36. selectShare,
  37. (shareState) => shareState.title
  38. )
  39. const makeSelectDisplay = () =>
  40. createSelector(
  41. selectShare,
  42. (shareState) => shareState.display
  43. )
  44. const makeSelectSlidesCount = () =>
  45. createSelector(
  46. selectSlidesLayers,
  47. (slidesLayers) => slidesLayers.length
  48. )
  49. const makeSelectSlideLayers = () =>
  50. createSelector(
  51. selectSlidesLayers,
  52. selectPropsSlideNumber,
  53. (slidesLayers, slideNumber) => slidesLayers[slideNumber - 1]
  54. )
  55. const makeSelectWidgets = () =>
  56. createSelector(
  57. selectShare,
  58. (shareState) => shareState.widgets
  59. )
  60. const makeSelectFormedViews = () =>
  61. createSelector(
  62. selectShare,
  63. (shareState) => shareState.formedViews
  64. )
  65. const makeSelectSlideLayerContextValue = () =>
  66. createSelector(
  67. selectSlidesLayers,
  68. selectSlideLayersInfo,
  69. selectPropsSlideNumber,
  70. selectPropsLayerId,
  71. (slidesLayers, slideLayersInfo, slideNumber, layerId) => {
  72. return {
  73. layer: slidesLayers[slideNumber - 1].relations.find(
  74. ({ id }) => id === layerId
  75. ),
  76. layerInfo: slideLayersInfo[slideNumber][layerId]
  77. }
  78. }
  79. )
  80. const makeSelectSlideLayersLoaded = () =>
  81. createSelector(
  82. selectSlideLayersInfo,
  83. selectPropsSlideNumber,
  84. (slideLayersInfo, slideNumber) =>
  85. Object.values(slideLayersInfo[slideNumber]).every(
  86. ({ status }) => status !== DashboardItemStatus.Pending
  87. )
  88. )
  89. export {
  90. selectShare,
  91. makeSelectTitle,
  92. makeSelectDisplay,
  93. makeSelectSlidesCount,
  94. makeSelectSlideLayers,
  95. makeSelectWidgets,
  96. makeSelectFormedViews,
  97. makeSelectSlideLayerContextValue,
  98. makeSelectSlideLayersLoaded
  99. }