@sanity/dashboard 0.136.3-purple-unicorn-patch.5627

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.
Files changed (134) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +118 -0
  3. package/lib/cjs/DashboardTool.js +59 -0
  4. package/lib/cjs/components/DashboardLayout.js +35 -0
  5. package/lib/cjs/components/NotFoundWidget.js +53 -0
  6. package/lib/cjs/components/WidgetGroup.js +71 -0
  7. package/lib/cjs/components/dashboardWidget.js +55 -0
  8. package/lib/cjs/containers/Dashboard.js +32 -0
  9. package/lib/cjs/containers/WidgetContainer.js +52 -0
  10. package/lib/cjs/dashboardConfig.js +16 -0
  11. package/lib/cjs/legacyParts.js +55 -0
  12. package/lib/cjs/versionedClient.js +20 -0
  13. package/lib/cjs/widget.css +62 -0
  14. package/lib/cjs/widgets/projectInfo/ProjectInfo.js +269 -0
  15. package/lib/cjs/widgets/projectInfo/index.js +19 -0
  16. package/lib/cjs/widgets/projectUsers/ProjectUsers.js +194 -0
  17. package/lib/cjs/widgets/projectUsers/index.js +16 -0
  18. package/lib/cjs/widgets/sanityTutorials/SanityTutorials.js +122 -0
  19. package/lib/cjs/widgets/sanityTutorials/Tutorial.js +114 -0
  20. package/lib/cjs/widgets/sanityTutorials/dataAdapter.js +28 -0
  21. package/lib/cjs/widgets/sanityTutorials/index.js +19 -0
  22. package/lib/dts/src/DashboardTool.d.ts +11 -0
  23. package/lib/dts/src/DashboardTool.d.ts.map +1 -0
  24. package/lib/dts/src/DashboardTool.js +18 -0
  25. package/lib/dts/src/DashboardTool.js.map +1 -0
  26. package/lib/dts/src/components/DashboardLayout.d.ts +13 -0
  27. package/lib/dts/src/components/DashboardLayout.d.ts.map +1 -0
  28. package/lib/dts/src/components/DashboardLayout.js +15 -0
  29. package/lib/dts/src/components/DashboardLayout.js.map +1 -0
  30. package/lib/dts/src/components/NotFoundWidget.d.ts +16 -0
  31. package/lib/dts/src/components/NotFoundWidget.d.ts.map +1 -0
  32. package/lib/dts/src/components/NotFoundWidget.js +29 -0
  33. package/lib/dts/src/components/NotFoundWidget.js.map +1 -0
  34. package/lib/dts/src/components/WidgetGroup.d.ts +3 -0
  35. package/lib/dts/src/components/WidgetGroup.d.ts.map +1 -0
  36. package/lib/dts/src/components/WidgetGroup.js +81 -0
  37. package/lib/dts/src/components/WidgetGroup.js.map +1 -0
  38. package/lib/dts/src/components/dashboardWidget.d.ts +9 -0
  39. package/lib/dts/src/components/dashboardWidget.d.ts.map +1 -0
  40. package/lib/dts/src/components/dashboardWidget.js +48 -0
  41. package/lib/dts/src/components/dashboardWidget.js.map +1 -0
  42. package/lib/dts/src/containers/Dashboard.d.ts +3 -0
  43. package/lib/dts/src/containers/Dashboard.d.ts.map +1 -0
  44. package/lib/dts/src/containers/Dashboard.js +14 -0
  45. package/lib/dts/src/containers/Dashboard.js.map +1 -0
  46. package/lib/dts/src/containers/WidgetContainer.d.ts +13 -0
  47. package/lib/dts/src/containers/WidgetContainer.d.ts.map +1 -0
  48. package/lib/dts/src/containers/WidgetContainer.js +42 -0
  49. package/lib/dts/src/containers/WidgetContainer.js.map +1 -0
  50. package/lib/dts/src/dashboardConfig.d.ts +7 -0
  51. package/lib/dts/src/dashboardConfig.d.ts.map +1 -0
  52. package/lib/dts/src/dashboardConfig.js +4 -0
  53. package/lib/dts/src/dashboardConfig.js.map +1 -0
  54. package/lib/dts/src/legacyParts.d.ts +8 -0
  55. package/lib/dts/src/legacyParts.d.ts.map +1 -0
  56. package/lib/dts/src/legacyParts.js +10 -0
  57. package/lib/dts/src/legacyParts.js.map +1 -0
  58. package/lib/dts/src/versionedClient.d.ts +8 -0
  59. package/lib/dts/src/versionedClient.d.ts.map +1 -0
  60. package/lib/dts/src/versionedClient.js +9 -0
  61. package/lib/dts/src/versionedClient.js.map +1 -0
  62. package/lib/dts/src/widgets/projectInfo/ProjectInfo.d.ts +31 -0
  63. package/lib/dts/src/widgets/projectInfo/ProjectInfo.d.ts.map +1 -0
  64. package/lib/dts/src/widgets/projectInfo/ProjectInfo.js +155 -0
  65. package/lib/dts/src/widgets/projectInfo/ProjectInfo.js.map +1 -0
  66. package/lib/dts/src/widgets/projectInfo/index.d.ts +10 -0
  67. package/lib/dts/src/widgets/projectInfo/index.d.ts.map +1 -0
  68. package/lib/dts/src/widgets/projectInfo/index.js +7 -0
  69. package/lib/dts/src/widgets/projectInfo/index.js.map +1 -0
  70. package/lib/dts/src/widgets/projectUsers/ProjectUsers.d.ts +20 -0
  71. package/lib/dts/src/widgets/projectUsers/ProjectUsers.d.ts.map +1 -0
  72. package/lib/dts/src/widgets/projectUsers/ProjectUsers.js +108 -0
  73. package/lib/dts/src/widgets/projectUsers/ProjectUsers.js.map +1 -0
  74. package/lib/dts/src/widgets/projectUsers/index.d.ts +7 -0
  75. package/lib/dts/src/widgets/projectUsers/index.d.ts.map +1 -0
  76. package/lib/dts/src/widgets/projectUsers/index.js +6 -0
  77. package/lib/dts/src/widgets/projectUsers/index.js.map +1 -0
  78. package/lib/dts/src/widgets/sanityTutorials/SanityTutorials.d.ts +21 -0
  79. package/lib/dts/src/widgets/sanityTutorials/SanityTutorials.d.ts.map +1 -0
  80. package/lib/dts/src/widgets/sanityTutorials/SanityTutorials.js +61 -0
  81. package/lib/dts/src/widgets/sanityTutorials/SanityTutorials.js.map +1 -0
  82. package/lib/dts/src/widgets/sanityTutorials/Tutorial.d.ts +21 -0
  83. package/lib/dts/src/widgets/sanityTutorials/Tutorial.d.ts.map +1 -0
  84. package/lib/dts/src/widgets/sanityTutorials/Tutorial.js +84 -0
  85. package/lib/dts/src/widgets/sanityTutorials/Tutorial.js.map +1 -0
  86. package/lib/dts/src/widgets/sanityTutorials/dataAdapter.d.ts +6 -0
  87. package/lib/dts/src/widgets/sanityTutorials/dataAdapter.d.ts.map +1 -0
  88. package/lib/dts/src/widgets/sanityTutorials/dataAdapter.js +16 -0
  89. package/lib/dts/src/widgets/sanityTutorials/dataAdapter.js.map +1 -0
  90. package/lib/dts/src/widgets/sanityTutorials/index.d.ts +10 -0
  91. package/lib/dts/src/widgets/sanityTutorials/index.d.ts.map +1 -0
  92. package/lib/dts/src/widgets/sanityTutorials/index.js +7 -0
  93. package/lib/dts/src/widgets/sanityTutorials/index.js.map +1 -0
  94. package/lib/dts/tsconfig.tsbuildinfo +1 -0
  95. package/lib/esm/DashboardTool.js +33 -0
  96. package/lib/esm/components/DashboardLayout.js +23 -0
  97. package/lib/esm/components/NotFoundWidget.js +39 -0
  98. package/lib/esm/components/WidgetGroup.js +54 -0
  99. package/lib/esm/components/dashboardWidget.js +38 -0
  100. package/lib/esm/containers/Dashboard.js +19 -0
  101. package/lib/esm/containers/WidgetContainer.js +39 -0
  102. package/lib/esm/dashboardConfig.js +9 -0
  103. package/lib/esm/legacyParts.js +9 -0
  104. package/lib/esm/versionedClient.js +11 -0
  105. package/lib/esm/widget.css +62 -0
  106. package/lib/esm/widgets/projectInfo/ProjectInfo.js +254 -0
  107. package/lib/esm/widgets/projectInfo/index.js +8 -0
  108. package/lib/esm/widgets/projectUsers/ProjectUsers.js +174 -0
  109. package/lib/esm/widgets/projectUsers/index.js +5 -0
  110. package/lib/esm/widgets/sanityTutorials/SanityTutorials.js +108 -0
  111. package/lib/esm/widgets/sanityTutorials/Tutorial.js +98 -0
  112. package/lib/esm/widgets/sanityTutorials/dataAdapter.js +16 -0
  113. package/lib/esm/widgets/sanityTutorials/index.js +8 -0
  114. package/package.json +55 -0
  115. package/sanity.json +59 -0
  116. package/src/DashboardTool.js +32 -0
  117. package/src/components/DashboardLayout.js +22 -0
  118. package/src/components/NotFoundWidget.js +41 -0
  119. package/src/components/WidgetGroup.js +97 -0
  120. package/src/components/dashboardWidget.tsx +70 -0
  121. package/src/containers/Dashboard.js +20 -0
  122. package/src/containers/WidgetContainer.js +52 -0
  123. package/src/dashboardConfig.js +3 -0
  124. package/src/legacyParts.ts +11 -0
  125. package/src/versionedClient.js +9 -0
  126. package/src/widget.css +62 -0
  127. package/src/widgets/projectInfo/ProjectInfo.js +232 -0
  128. package/src/widgets/projectInfo/index.js +7 -0
  129. package/src/widgets/projectUsers/ProjectUsers.js +179 -0
  130. package/src/widgets/projectUsers/index.js +6 -0
  131. package/src/widgets/sanityTutorials/SanityTutorials.js +91 -0
  132. package/src/widgets/sanityTutorials/Tutorial.js +120 -0
  133. package/src/widgets/sanityTutorials/dataAdapter.js +17 -0
  134. package/src/widgets/sanityTutorials/index.js +7 -0
@@ -0,0 +1,269 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _isPlainObject2 = _interopRequireDefault(require("lodash/isPlainObject"));
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _propTypes = _interopRequireDefault(require("prop-types"));
13
+
14
+ var _ui = require("@sanity/ui");
15
+
16
+ var _versionedClient = require("../../versionedClient");
17
+
18
+ var _DashboardTool = require("../../DashboardTool");
19
+
20
+ var _legacyParts = require("../../legacyParts");
21
+
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+
24
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
25
+
26
+ const {
27
+ projectId,
28
+ dataset
29
+ } = _versionedClient.versionedClient.config();
30
+
31
+ function isUrl(url) {
32
+ return /^https?:\/\//.test("".concat(url));
33
+ }
34
+
35
+ function getGraphQlUrl() {
36
+ return "https://".concat(projectId, ".api.sanity.io/v1/graphql/").concat(dataset, "/default");
37
+ }
38
+
39
+ function getGroqUrl() {
40
+ return "https://".concat(projectId, ".api.sanity.io/v1/groq/").concat(dataset);
41
+ }
42
+
43
+ function getManageUrl() {
44
+ return "https://manage.sanity.io/projects/".concat(projectId);
45
+ }
46
+
47
+ class ProjectInfo extends _react.default.PureComponent {
48
+ constructor() {
49
+ super(...arguments);
50
+
51
+ _defineProperty(this, "state", {
52
+ studioHost: null,
53
+ graphqlApi: null
54
+ });
55
+ }
56
+
57
+ componentDidMount() {
58
+ // fetch project data
59
+ this.subscriptions = [];
60
+ this.subscriptions.push(_versionedClient.versionedClient.observable.request({
61
+ uri: "/projects/".concat(projectId)
62
+ }).subscribe({
63
+ next: result => {
64
+ const {
65
+ studioHost
66
+ } = result;
67
+ this.setState({
68
+ studioHost: studioHost ? "https://".concat(studioHost, ".sanity.studio") : null
69
+ });
70
+ },
71
+ error: error => {
72
+ console.log('Error while looking for studioHost', error);
73
+ this.setState({
74
+ studioHost: {
75
+ error: 'Something went wrong while looking up studioHost. See console.'
76
+ }
77
+ });
78
+ }
79
+ })); // ping assumed graphql endpoint
80
+
81
+ this.subscriptions.push(_versionedClient.versionedClient.observable.request({
82
+ method: 'HEAD',
83
+ uri: "/graphql/".concat(dataset, "/default")
84
+ }).subscribe({
85
+ next: () => this.setState({
86
+ graphqlApi: getGraphQlUrl()
87
+ }),
88
+ error: error => {
89
+ if (error.statusCode === 404) {
90
+ this.setState({
91
+ graphqlApi: null
92
+ });
93
+ } else {
94
+ console.log('Error while looking for graphqlApi', error);
95
+ this.setState({
96
+ graphqlApi: {
97
+ error: 'Something went wrong while looking up graphqlApi. See console.'
98
+ }
99
+ });
100
+ }
101
+ }
102
+ }));
103
+ }
104
+
105
+ componentWillUnmount() {
106
+ this.subscriptions.forEach(sub => sub.unsubscribe());
107
+ }
108
+
109
+ assembleTableRows() {
110
+ const {
111
+ graphqlApi,
112
+ studioHost
113
+ } = this.state;
114
+ const propsData = this.props.data;
115
+ let result = [{
116
+ title: 'Sanity project',
117
+ rows: [{
118
+ title: 'Project ID',
119
+ value: projectId
120
+ }, {
121
+ title: 'Dataset',
122
+ value: dataset
123
+ }]
124
+ }]; // Handle any apps
125
+
126
+ const apps = [studioHost ? {
127
+ title: 'Studio',
128
+ value: studioHost
129
+ } : null].concat(propsData.filter(item => item.category === 'apps')).filter(Boolean);
130
+
131
+ if (apps.length > 0) {
132
+ result = result.concat([{
133
+ title: 'Apps',
134
+ rows: apps
135
+ }]);
136
+ } // Handle APIs
137
+
138
+
139
+ result = result.concat([{
140
+ title: 'APIs',
141
+ rows: [{
142
+ title: 'GROQ',
143
+ value: getGroqUrl()
144
+ }, {
145
+ title: 'GraphQL',
146
+ value: graphqlApi || 'Not deployed'
147
+ }]
148
+ }], propsData.filter(item => item.category === 'apis')); // Handle whatever else there might be
149
+
150
+ const otherStuff = {};
151
+ propsData.forEach(item => {
152
+ if (item.category !== 'apps' && item.category !== 'apis') {
153
+ if (!otherStuff[item.category]) {
154
+ otherStuff[item.category] = [];
155
+ }
156
+
157
+ otherStuff[item.category].push(item);
158
+ }
159
+ });
160
+ Object.keys(otherStuff).forEach(category => {
161
+ result.push({
162
+ title: category,
163
+ rows: otherStuff[category]
164
+ });
165
+ });
166
+ return result;
167
+ }
168
+
169
+ render() {
170
+ var _this$props$__experim;
171
+
172
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, this.props.__experimental_before && this.props.__experimental_before.map((widgetConfig, idx) => /*#__PURE__*/_react.default.createElement(_legacyParts.WidgetContainer, {
173
+ key: String(idx),
174
+ config: widgetConfig
175
+ })), /*#__PURE__*/_react.default.createElement(_ui.Box, {
176
+ height: "fill",
177
+ marginTop: ((_this$props$__experim = this.props.__experimental_before) === null || _this$props$__experim === void 0 ? void 0 : _this$props$__experim.length) > 0 ? 4 : 0
178
+ }, /*#__PURE__*/_react.default.createElement(_DashboardTool.DashboardWidget, {
179
+ footer: /*#__PURE__*/_react.default.createElement(_ui.Button, {
180
+ style: {
181
+ width: '100%'
182
+ },
183
+ paddingX: 2,
184
+ paddingY: 4,
185
+ mode: "bleed",
186
+ tone: "primary",
187
+ text: "Manage project",
188
+ as: "a",
189
+ href: getManageUrl()
190
+ })
191
+ }, /*#__PURE__*/_react.default.createElement(_ui.Card, {
192
+ paddingY: 4,
193
+ radius: 2,
194
+ role: "table",
195
+ "aria-label": "Project info",
196
+ "aria-describedby": "project_info_table"
197
+ }, /*#__PURE__*/_react.default.createElement(_ui.Stack, {
198
+ space: 4
199
+ }, /*#__PURE__*/_react.default.createElement(_ui.Box, {
200
+ paddingX: 3,
201
+ as: "header"
202
+ }, /*#__PURE__*/_react.default.createElement(_ui.Heading, {
203
+ size: 1,
204
+ as: "h2",
205
+ id: "project_info_table"
206
+ }, "Project info")), this.assembleTableRows().map(item => {
207
+ if (!item || !item.rows) {
208
+ return null;
209
+ }
210
+
211
+ return /*#__PURE__*/_react.default.createElement(_ui.Stack, {
212
+ key: item.title,
213
+ space: 3
214
+ }, /*#__PURE__*/_react.default.createElement(_ui.Card, {
215
+ borderBottom: true,
216
+ padding: 3
217
+ }, /*#__PURE__*/_react.default.createElement(_ui.Label, {
218
+ size: 0,
219
+ muted: true,
220
+ role: "columnheader"
221
+ }, item.title)), /*#__PURE__*/_react.default.createElement(_ui.Stack, {
222
+ space: 4,
223
+ paddingX: 3,
224
+ role: "rowgroup"
225
+ }, item.rows.map(row => {
226
+ return /*#__PURE__*/_react.default.createElement(_ui.Grid, {
227
+ key: row.title,
228
+ columns: 2,
229
+ role: "row"
230
+ }, /*#__PURE__*/_react.default.createElement(_ui.Text, {
231
+ weight: "medium",
232
+ role: "rowheader"
233
+ }, row.title), (0, _isPlainObject2.default)(row.value) && /*#__PURE__*/_react.default.createElement(_ui.Text, {
234
+ size: 1
235
+ }, row.value.error), !(0, _isPlainObject2.default)(row.value) && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, isUrl(row.value) ? /*#__PURE__*/_react.default.createElement(_ui.Text, {
236
+ size: 1,
237
+ role: "cell",
238
+ style: {
239
+ wordBreak: 'break-word'
240
+ }
241
+ }, /*#__PURE__*/_react.default.createElement("a", {
242
+ href: row.value
243
+ }, row.value)) : /*#__PURE__*/_react.default.createElement(_ui.Code, {
244
+ size: 1,
245
+ role: "cell",
246
+ style: {
247
+ wordBreak: 'break-word'
248
+ }
249
+ }, row.value)));
250
+ })));
251
+ }))))));
252
+ }
253
+
254
+ }
255
+
256
+ _defineProperty(ProjectInfo, "propTypes", {
257
+ // eslint-disable-next-line camelcase
258
+ __experimental_before: _propTypes.default.array,
259
+ data: _propTypes.default.array
260
+ });
261
+
262
+ _defineProperty(ProjectInfo, "defaultProps", {
263
+ // eslint-disable-next-line camelcase
264
+ __experimental_before: [],
265
+ data: []
266
+ });
267
+
268
+ var _default = ProjectInfo;
269
+ exports.default = _default;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _ProjectInfo = _interopRequireDefault(require("./ProjectInfo"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ var _default = {
13
+ name: 'project-info',
14
+ component: _ProjectInfo.default,
15
+ layout: {
16
+ width: 'medium'
17
+ }
18
+ };
19
+ exports.default = _default;
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _operators = require("rxjs/operators");
11
+
12
+ var _ui = require("@sanity/ui");
13
+
14
+ var _icons = require("@sanity/icons");
15
+
16
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
17
+
18
+ var _base = require("@sanity/base");
19
+
20
+ var _versionedClient = require("../../versionedClient");
21
+
22
+ var _DashboardTool = require("../../DashboardTool");
23
+
24
+ var _legacyParts = require("../../legacyParts");
25
+
26
+ var _templateObject;
27
+
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
+
30
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
31
+
32
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
33
+
34
+ const AvatarWrapper = (0, _styledComponents.default)(_ui.Card)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n box-sizing: border-box;\n border-radius: 50%;\n border-color: transparent;\n overflow: hidden;\n width: 100%;\n height: 100%;\n\n & > img {\n width: 100%;\n height: auto;\n }\n"])));
35
+
36
+ function getInviteUrl(projectId) {
37
+ return "https://manage.sanity.io/projects/".concat(projectId, "/team/invite");
38
+ }
39
+
40
+ function sortUsersByRobotStatus(userA, userB, project) {
41
+ const {
42
+ members
43
+ } = project;
44
+ const membershipA = members.find(member => member.id === userA.id);
45
+ const membershipB = members.find(member => member.id === userB.id);
46
+
47
+ if (membershipA.isRobot) {
48
+ return 1;
49
+ }
50
+
51
+ if (membershipB.isRobot) {
52
+ return -1;
53
+ }
54
+
55
+ return 0;
56
+ }
57
+
58
+ class ProjectUsers extends _react.default.PureComponent {
59
+ constructor() {
60
+ super(...arguments);
61
+
62
+ _defineProperty(this, "state", {
63
+ project: null,
64
+ users: null,
65
+ error: null
66
+ });
67
+
68
+ _defineProperty(this, "handleRetryFetch", () => {
69
+ this.fetchData();
70
+ });
71
+ }
72
+
73
+ componentDidMount() {
74
+ this.fetchData();
75
+ }
76
+
77
+ componentWillUnmount() {
78
+ if (this.subscription) {
79
+ this.subscription.unsubscribe();
80
+ }
81
+ }
82
+
83
+ fetchData() {
84
+ if (this.subscription) {
85
+ this.subscription.unsubscribe();
86
+ }
87
+
88
+ const {
89
+ projectId
90
+ } = _versionedClient.versionedClient.config();
91
+
92
+ this.subscription = _versionedClient.versionedClient.observable.request({
93
+ uri: "/projects/".concat(projectId)
94
+ }).pipe((0, _operators.switchMap)(project => _legacyParts.userStore.observable.getUsers(project.members.map(mem => mem.id)).pipe((0, _operators.map)(users => ({
95
+ project,
96
+ users
97
+ }))))).subscribe({
98
+ next: _ref => {
99
+ let {
100
+ users,
101
+ project
102
+ } = _ref;
103
+ return this.setState({
104
+ project,
105
+ users: (Array.isArray(users) ? users : [users]).sort((userA, userB) => sortUsersByRobotStatus(userA, userB, project))
106
+ });
107
+ },
108
+ error: error => this.setState({
109
+ error
110
+ })
111
+ });
112
+ }
113
+
114
+ render() {
115
+ const {
116
+ error,
117
+ project,
118
+ users
119
+ } = this.state;
120
+ const isLoading = !users || !project;
121
+
122
+ if (error) {
123
+ return /*#__PURE__*/_react.default.createElement(_DashboardTool.DashboardWidget, {
124
+ header: "Project users"
125
+ }, /*#__PURE__*/_react.default.createElement(_ui.Box, {
126
+ padding: 4
127
+ }, /*#__PURE__*/_react.default.createElement(_ui.Text, null, "Something went wrong while fetching data. You could", ' ', /*#__PURE__*/_react.default.createElement("a", {
128
+ onClick: this.handleRetryFetch,
129
+ title: "Retry users fetch",
130
+ style: {
131
+ cursor: 'pointer'
132
+ }
133
+ }, "retry"), "..?")));
134
+ }
135
+
136
+ return /*#__PURE__*/_react.default.createElement(_DashboardTool.DashboardWidget, {
137
+ header: "Project users",
138
+ footer: /*#__PURE__*/_react.default.createElement(_ui.Button, {
139
+ style: {
140
+ width: '100%'
141
+ },
142
+ paddingX: 2,
143
+ paddingY: 4,
144
+ mode: "bleed",
145
+ tone: "primary",
146
+ text: "Invite members",
147
+ as: "a",
148
+ loading: isLoading,
149
+ href: isLoading ? undefined : getInviteUrl(project.id)
150
+ })
151
+ }, isLoading && /*#__PURE__*/_react.default.createElement(_ui.Box, {
152
+ paddingY: 5,
153
+ paddingX: 2
154
+ }, /*#__PURE__*/_react.default.createElement(_ui.Stack, {
155
+ space: 4
156
+ }, /*#__PURE__*/_react.default.createElement(_ui.Text, {
157
+ align: "center",
158
+ muted: true,
159
+ size: 1
160
+ }, /*#__PURE__*/_react.default.createElement(_ui.Spinner, null)), /*#__PURE__*/_react.default.createElement(_ui.Text, {
161
+ align: "center",
162
+ size: 1,
163
+ muted: true
164
+ }, "Loading items..."))), !isLoading && /*#__PURE__*/_react.default.createElement(_ui.Stack, {
165
+ space: 3,
166
+ padding: 3
167
+ }, users.map(user => {
168
+ const membership = project.members.find(member => member.id === user.id);
169
+ const media = membership.isRobot ? /*#__PURE__*/_react.default.createElement(_ui.Text, {
170
+ size: 3
171
+ }, /*#__PURE__*/_react.default.createElement(_icons.RobotIcon, null)) : /*#__PURE__*/_react.default.createElement(AvatarWrapper, {
172
+ tone: "transparent"
173
+ }, (user === null || user === void 0 ? void 0 : user.imageUrl) && /*#__PURE__*/_react.default.createElement("img", {
174
+ src: user.imageUrl,
175
+ alt: user === null || user === void 0 ? void 0 : user.displayName
176
+ }));
177
+ return /*#__PURE__*/_react.default.createElement(_ui.Box, {
178
+ key: user.id
179
+ }, /*#__PURE__*/_react.default.createElement(_base.DefaultPreview, {
180
+ title: user.displayName,
181
+ subtitle: membership.role,
182
+ media: media
183
+ }));
184
+ })));
185
+ }
186
+
187
+ }
188
+
189
+ _defineProperty(ProjectUsers, "propTypes", {});
190
+
191
+ _defineProperty(ProjectUsers, "defaultProps", {});
192
+
193
+ var _default = ProjectUsers;
194
+ exports.default = _default;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _ProjectUsers = _interopRequireDefault(require("./ProjectUsers"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ var _default = {
13
+ name: 'project-users',
14
+ component: _ProjectUsers.default
15
+ };
16
+ exports.default = _default;
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _get2 = _interopRequireDefault(require("lodash/get"));
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _propTypes = _interopRequireDefault(require("prop-types"));
13
+
14
+ var _ui = require("@sanity/ui");
15
+
16
+ var _DashboardTool = require("../../DashboardTool");
17
+
18
+ var _Tutorial = _interopRequireDefault(require("./Tutorial"));
19
+
20
+ var _dataAdapter = _interopRequireDefault(require("./dataAdapter"));
21
+
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+
24
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
25
+
26
+ const {
27
+ urlBuilder,
28
+ getFeed
29
+ } = _dataAdapter.default;
30
+
31
+ function createUrl(slug, type) {
32
+ if (type === 'tutorial') {
33
+ return "https://www.sanity.io/docs/tutorials/".concat(slug.current);
34
+ } else if (type === 'guide') {
35
+ return "https://www.sanity.io/docs/guides/".concat(slug.current);
36
+ }
37
+
38
+ return false;
39
+ }
40
+
41
+ class SanityTutorials extends _react.default.Component {
42
+ constructor() {
43
+ super(...arguments);
44
+
45
+ _defineProperty(this, "state", {
46
+ feedItems: []
47
+ });
48
+ }
49
+
50
+ componentDidMount() {
51
+ const {
52
+ templateRepoId
53
+ } = this.props;
54
+ this.subscription = getFeed(templateRepoId).subscribe(response => {
55
+ this.setState({
56
+ feedItems: response.items
57
+ });
58
+ });
59
+ }
60
+
61
+ componentWillUnmount() {
62
+ if (this.subscription) {
63
+ this.subscription.unsubscribe();
64
+ }
65
+ }
66
+
67
+ render() {
68
+ const {
69
+ feedItems
70
+ } = this.state;
71
+ const title = 'Learn about Sanity';
72
+ return /*#__PURE__*/_react.default.createElement(_DashboardTool.DashboardWidget, {
73
+ header: title
74
+ }, /*#__PURE__*/_react.default.createElement(_ui.Flex, {
75
+ as: "ul",
76
+ overflow: "auto",
77
+ align: "stretch",
78
+ paddingY: 2
79
+ }, feedItems === null || feedItems === void 0 ? void 0 : feedItems.map((feedItem, index) => {
80
+ if (!feedItem.title || !feedItem.guideOrTutorial && !feedItem.externalLink) {
81
+ return null;
82
+ }
83
+
84
+ const presenter = feedItem.presenter || (0, _get2.default)(feedItem, 'guideOrTutorial.presenter') || {};
85
+ const subtitle = (0, _get2.default)(feedItem, 'category');
86
+ const {
87
+ guideOrTutorial = {}
88
+ } = feedItem;
89
+ return /*#__PURE__*/_react.default.createElement(_ui.Flex, {
90
+ as: "li",
91
+ key: feedItem._id,
92
+ paddingRight: index < (feedItems === null || feedItems === void 0 ? void 0 : feedItems.length) - 1 ? 1 : 3,
93
+ paddingLeft: index === 0 ? 3 : 0,
94
+ align: "stretch",
95
+ flex: "0 0 27.5%",
96
+ style: {
97
+ minWidth: 272,
98
+ width: '30%'
99
+ }
100
+ }, /*#__PURE__*/_react.default.createElement(_Tutorial.default, {
101
+ title: feedItem.title,
102
+ href: createUrl(guideOrTutorial.slug, guideOrTutorial._type) || feedItem.externalLink,
103
+ presenterName: presenter.name,
104
+ presenterSubtitle: subtitle,
105
+ showPlayIcon: feedItem.hasVideo,
106
+ posterURL: urlBuilder.image(feedItem.poster).height(360).url()
107
+ }));
108
+ })));
109
+ }
110
+
111
+ }
112
+
113
+ _defineProperty(SanityTutorials, "propTypes", {
114
+ templateRepoId: _propTypes.default.string
115
+ });
116
+
117
+ _defineProperty(SanityTutorials, "defaultProps", {
118
+ templateRepoId: null
119
+ });
120
+
121
+ var _default = SanityTutorials;
122
+ exports.default = _default;