Skip to content

Commit f76da8f

Browse files
committed
add vieweditable for smartviews views
1 parent d97d141 commit f76da8f

File tree

12 files changed

+79
-55
lines changed

12 files changed

+79
-55
lines changed

src/cloud/components/Props/Pickers/StatusSelect.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,11 @@ const StatusSelect = ({
8585
export default StatusSelect
8686

8787
export const StatusSelector = ({
88+
readOnly,
8889
onSelect,
8990
ignoredStatuses = [],
9091
}: {
92+
readOnly?: boolean
9193
ignoredStatuses?: string[]
9294
onSelect: (status: SerializedStatus | null) => void
9395
}) => {
@@ -116,9 +118,9 @@ export const StatusSelector = ({
116118
}
117119
})}
118120
onSelect={onSelect}
119-
onCreate={createStatus}
120-
onUpdate={editStatus}
121-
onDelete={removeStatus}
121+
onCreate={!readOnly ? createStatus : undefined}
122+
onUpdate={!readOnly ? editStatus : undefined}
123+
onDelete={!readOnly ? removeStatus : undefined}
122124
type='Status'
123125
allowEmpty={
124126
ignoredStatuses == null ? true : !ignoredStatuses.includes('none')

src/cloud/components/Views/Calendar/CalendarView.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ const CalendarView = ({
212212
[actionsRef, closeLastModal]
213213
)
214214

215+
const isViewEditable = currentUserIsCoreMember || view.smartViewId != null
215216
return (
216217
<Container className='view view--calendar'>
217218
<Flexbox justifyContent='space-between' alignItems='center'>
@@ -228,7 +229,7 @@ const CalendarView = ({
228229
teamId={team.id}
229230
watchedProp={watchedProp}
230231
updateWatchedProp={actionsRef.current.updateWatchedProp}
231-
currentUserIsCoreMember={currentUserIsCoreMember}
232+
isViewEditable={isViewEditable}
232233
/>,
233234
{
234235
width: 250,
@@ -281,7 +282,7 @@ const CalendarView = ({
281282
view={view}
282283
teamId={team.id}
283284
properties={view.data.props}
284-
currentUserIsCoreMember={currentUserIsCoreMember}
285+
isViewEditable={isViewEditable}
285286
setProperties={actionsRef.current.setViewProperties}
286287
/>,
287288
{

src/cloud/components/Views/Calendar/CalendarViewPropertiesContext.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ interface CalendarViewPropertiesContextProps {
3333
view: SerializedView<ViewCalendarData>
3434
teamId: string
3535
properties?: Record<string, CalendarViewProp>
36-
currentUserIsCoreMember?: boolean
36+
isViewEditable?: boolean
3737
setProperties: (
3838
props: Record<string, CalendarViewProp>
3939
) => Promise<BulkApiActionRes | undefined>
@@ -43,7 +43,7 @@ const CalendarViewPropertiesContext = ({
4343
view,
4444
teamId,
4545
properties = {},
46-
currentUserIsCoreMember,
46+
isViewEditable,
4747
setProperties,
4848
}: CalendarViewPropertiesContextProps) => {
4949
const [formState, setFormState] = useState<'list' | 'add'>('list')
@@ -160,7 +160,7 @@ const CalendarViewPropertiesContext = ({
160160
type: 'content',
161161
icon: getIconPathOfPropType(col.id.split(':').pop() as any),
162162
label: <EllipsisText>{col.name}</EllipsisText>,
163-
content: currentUserIsCoreMember ? (
163+
content: isViewEditable ? (
164164
<Flexbox justifyContent='flex-end'>
165165
<LoadingButton
166166
variant='icon'
@@ -180,7 +180,7 @@ const CalendarViewPropertiesContext = ({
180180
))}
181181
</>
182182
)}
183-
{currentUserIsCoreMember && (
183+
{isViewEditable && (
184184
<>
185185
{orderedProps.length > 0 && <MetadataContainerBreak />}
186186
<MetadataContainerRow

src/cloud/components/Views/Calendar/CalendarWatchedPropContext.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import { filterIter } from '../../../lib/utils/iterator'
2626
interface CalendarWatchedPropContextProps {
2727
view: SerializedView
2828
teamId: string
29-
currentUserIsCoreMember?: boolean
29+
isViewEditable?: boolean
3030
watchedProp: {
3131
type: PropType
3232
name: string
@@ -46,7 +46,7 @@ interface PropertySuggestions {
4646
const CalendarWatchedPropContext = ({
4747
view,
4848
watchedProp,
49-
currentUserIsCoreMember,
49+
isViewEditable,
5050
teamId,
5151
updateWatchedProp,
5252
}: CalendarWatchedPropContextProps) => {
@@ -162,8 +162,7 @@ const CalendarWatchedPropContext = ({
162162
</Flexbox>
163163
),
164164
iconPath: getIconPathOfPropType(propSuggestion.type),
165-
disabled:
166-
!currentUserIsCoreMember || sending != null || isSelected,
165+
disabled: !isViewEditable || sending != null || isSelected,
167166
spinning: sending === propSuggestion.name,
168167
id: id,
169168
onClick: () => setNewWatchedProp(propSuggestion),
@@ -198,8 +197,7 @@ const CalendarWatchedPropContext = ({
198197
</Flexbox>
199198
),
200199
iconPath: getIconPathOfPropType(propSuggestion.type),
201-
disabled:
202-
!currentUserIsCoreMember || sending != null || isSelected,
200+
disabled: !isViewEditable || sending != null || isSelected,
203201
spinning: sending === propSuggestion.name,
204202
id: id,
205203
onClick: () => setNewWatchedProp(propSuggestion),

src/cloud/components/Views/Kanban/KanbanViewPropertiesContext.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ interface KanbanViewPropertiesContextProps {
3333
view: SerializedView<KanbanViewData>
3434
teamId: string
3535
properties?: Record<string, KanbanViewProp>
36-
currentUserIsCoreMember?: boolean
36+
isViewEditable?: boolean
3737
setProperties: (
3838
props: Record<string, KanbanViewProp>
3939
) => Promise<BulkApiActionRes | undefined>
@@ -43,7 +43,7 @@ const KanbanViewPropertiesContext = ({
4343
view,
4444
teamId,
4545
properties = {},
46-
currentUserIsCoreMember,
46+
isViewEditable,
4747
setProperties,
4848
}: KanbanViewPropertiesContextProps) => {
4949
const [formState, setFormState] = useState<'list' | 'add'>('list')
@@ -159,7 +159,7 @@ const KanbanViewPropertiesContext = ({
159159
type: 'content',
160160
icon: getIconPathOfPropType(col.id.split(':').pop() as any),
161161
label: <EllipsisText>{col.name}</EllipsisText>,
162-
content: currentUserIsCoreMember ? (
162+
content: isViewEditable ? (
163163
<Flexbox justifyContent='flex-end'>
164164
<LoadingButton
165165
variant='icon'
@@ -179,7 +179,7 @@ const KanbanViewPropertiesContext = ({
179179
))}
180180
</>
181181
)}
182-
{currentUserIsCoreMember && (
182+
{isViewEditable && (
183183
<>
184184
{orderedProps.length > 0 && <MetadataContainerBreak />}
185185
<MetadataContainerRow

src/cloud/components/Views/Kanban/index.tsx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ const KanbanView = ({
7373
const { createDoc } = useCloudApi()
7474
const { translate } = useI18n()
7575
const { goToDocPreview, openNewDocForm } = useCloudResourceModals()
76+
const isViewEditable = currentUserIsCoreMember || view.smartViewId != null
7677

7778
const addListRef = useRef(addList)
7879
useEffect(() => {
@@ -84,6 +85,7 @@ const KanbanView = ({
8485
openContextModal(
8586
ev,
8687
<StatusSelector
88+
readOnly={!currentUserIsCoreMember}
8789
ignoredStatuses={lists.map((list) => list.id)}
8890
onSelect={(status) => {
8991
addListRef.current(status?.id.toString() || 'none')
@@ -93,7 +95,7 @@ const KanbanView = ({
9395
{ width: 200, removePadding: true, keepAll: true }
9496
)
9597
},
96-
[openContextModal, closeLastModal, lists]
98+
[openContextModal, closeLastModal, currentUserIsCoreMember, lists]
9799
)
98100

99101
const removeListRef = useRef(removeList)
@@ -123,9 +125,9 @@ const KanbanView = ({
123125
name={status?.name || 'No Status'}
124126
backgroundColor={status?.backgroundColor}
125127
/>
126-
{currentUserIsCoreMember && (
128+
{isViewEditable && (
127129
<div className={'kanban__item--action-buttons'}>
128-
{currentWorkspaceId != null && (
130+
{currentWorkspaceId != null && currentUserIsCoreMember && (
129131
<Button
130132
className={'kanban__item--action-button'}
131133
variant={'icon'}
@@ -176,6 +178,7 @@ const KanbanView = ({
176178
type='status'
177179
label={status}
178180
onSave={(status) => editStatus(status)}
181+
readOnly={!currentUserIsCoreMember}
179182
/>
180183
<MetadataContainerBreak />
181184
</>
@@ -207,6 +210,7 @@ const KanbanView = ({
207210
closeLastModal,
208211
openNewDocForm,
209212
currentUserIsCoreMember,
213+
isViewEditable,
210214
]
211215
)
212216

@@ -286,7 +290,7 @@ const KanbanView = ({
286290
{viewsSelector}
287291
<Flexbox flex='0 0 auto'>
288292
<Button
289-
disabled={!currentUserIsCoreMember}
293+
disabled={!isViewEditable}
290294
variant='transparent'
291295
className='view--kanban__prop'
292296
onClick={(event) =>
@@ -325,7 +329,7 @@ const KanbanView = ({
325329
view={view}
326330
teamId={team.id}
327331
properties={view.data.props}
328-
currentUserIsCoreMember={currentUserIsCoreMember}
332+
isViewEditable={isViewEditable}
329333
setProperties={setProperties}
330334
/>,
331335
{
@@ -352,7 +356,7 @@ const KanbanView = ({
352356
afterItems={renderListFooter}
353357
afterLists={
354358
<Button
355-
disabled={!currentUserIsCoreMember}
359+
disabled={!isViewEditable}
356360
onClick={openSelector}
357361
iconPath={mdiPlus}
358362
variant='transparent'

src/cloud/components/Views/List/ListViewPropertiesContext.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ interface ListViewPropertiesContextProps {
3333
view: SerializedView<ViewListData>
3434
teamId: string
3535
properties?: Record<string, ListViewProp>
36-
currentUserIsCoreMember?: boolean
36+
isViewEditable?: boolean
3737
setProperties: (
3838
view: SerializedView,
3939
props: Record<string, ListViewProp>
@@ -44,7 +44,7 @@ const ListViewPropertiesContext = ({
4444
view: currentView,
4545
teamId,
4646
properties = {},
47-
currentUserIsCoreMember,
47+
isViewEditable,
4848
setProperties,
4949
}: ListViewPropertiesContextProps) => {
5050
const [view, setView] = useState(currentView)
@@ -163,7 +163,7 @@ const ListViewPropertiesContext = ({
163163
type: 'content',
164164
icon: getIconPathOfPropType(prop.id.split(':').pop() as any),
165165
label: <EllipsisText>{prop.name}</EllipsisText>,
166-
content: currentUserIsCoreMember ? (
166+
content: isViewEditable ? (
167167
<Flexbox justifyContent='flex-end'>
168168
<LoadingButton
169169
variant='icon'
@@ -183,7 +183,7 @@ const ListViewPropertiesContext = ({
183183
))}
184184
</>
185185
)}
186-
{currentUserIsCoreMember && (
186+
{isViewEditable && (
187187
<>
188188
{orderedProps.length > 0 && <MetadataContainerBreak />}
189189
<MetadataContainerRow

src/cloud/components/Views/List/index.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ const ListView = ({
187187
[dropInDocOrFolder]
188188
)
189189

190+
const isViewEditable = currentUserIsCoreMember || view.smartViewId != null
190191
return (
191192
<Container className='view view--table'>
192193
<StyledContentManagerList>
@@ -204,7 +205,7 @@ const ListView = ({
204205
view={view}
205206
teamId={team.id}
206207
properties={view.data.props}
207-
currentUserIsCoreMember={currentUserIsCoreMember}
208+
isViewEditable={isViewEditable}
208209
setProperties={actionsRef.current.setProperties}
209210
/>,
210211
{

src/cloud/components/Views/Table/TableView.tsx

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ const TableView = ({
156156
setState(Object.assign({}, view.data as ViewTableData))
157157
}, [view.data])
158158

159+
const isViewEditable = currentUserIsCoreMember || view.smartViewId != null
159160
return (
160161
<Container className='view view--table'>
161162
<StyledContentManagerList>
@@ -172,7 +173,7 @@ const TableView = ({
172173
view={view}
173174
teamId={team.id}
174175
columns={view.data.columns}
175-
currentUserIsCoreMember={currentUserIsCoreMember}
176+
isViewEditable={isViewEditable}
176177
setColumns={actionsRef.current.setColumns}
177178
/>,
178179
{
@@ -198,12 +199,12 @@ const TableView = ({
198199
id: 'doc-title',
199200
children: <Flexbox style={{ height: '100%' }}>Title</Flexbox>,
200201
width: view.data.titleColumnWidth ?? 300,
201-
onWidthChange: !currentUserIsCoreMember
202+
onWidthChange: !isViewEditable
202203
? undefined
203204
: (newWidth) => {
204205
actionsRef.current.updateTitleColumnWidth(newWidth)
205206
},
206-
onClick: !currentUserIsCoreMember
207+
onClick: !isViewEditable
207208
? undefined
208209
: (ev: any) =>
209210
openContextModal(
@@ -234,12 +235,12 @@ const TableView = ({
234235
</Flexbox>
235236
),
236237
width: col.width ?? 200,
237-
onWidthChange: !currentUserIsCoreMember
238+
onWidthChange: !isViewEditable
238239
? undefined
239240
: (newWidth: number) => {
240241
actionsRef.current.updateColumnWidth(col, newWidth)
241242
},
242-
onClick: !currentUserIsCoreMember
243+
onClick: !isViewEditable
243244
? undefined
244245
: (ev: any) =>
245246
openContextModal(
@@ -350,9 +351,9 @@ const TableView = ({
350351
],
351352
}
352353
})}
353-
disabledAddColumn={!currentUserIsCoreMember}
354+
disabledAddColumn={!isViewEditable}
354355
onAddColButtonClick={
355-
!currentUserIsCoreMember
356+
!isViewEditable
356357
? undefined
357358
: (ev) =>
358359
openContextModal(

src/cloud/components/Views/Table/TableViewPropertiesContext.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ interface TableViewPropertiesContextProps {
3333
view: SerializedView<ViewTableData>
3434
teamId: string
3535
columns?: Record<string, Column>
36-
currentUserIsCoreMember?: boolean
36+
isViewEditable?: boolean
3737
setColumns: (
3838
cols: Record<string, Column>
3939
) => Promise<BulkApiActionRes | undefined>
@@ -43,7 +43,7 @@ const TableViewPropertiesContext = ({
4343
view,
4444
teamId,
4545
columns = {},
46-
currentUserIsCoreMember,
46+
isViewEditable,
4747
setColumns,
4848
}: TableViewPropertiesContextProps) => {
4949
const [formState, setFormState] = useState<'list' | 'add'>('list')
@@ -160,7 +160,7 @@ const TableViewPropertiesContext = ({
160160
type: 'content',
161161
icon: getIconPathOfPropType(col.id.split(':').pop() as any),
162162
label: <EllipsisText>{col.name}</EllipsisText>,
163-
content: currentUserIsCoreMember ? (
163+
content: isViewEditable ? (
164164
<Flexbox justifyContent='flex-end'>
165165
<LoadingButton
166166
variant='icon'
@@ -178,7 +178,7 @@ const TableViewPropertiesContext = ({
178178
))}
179179
</>
180180
)}
181-
{currentUserIsCoreMember && (
181+
{isViewEditable && (
182182
<>
183183
{orderedProps.length > 0 && <MetadataContainerBreak />}
184184
<MetadataContainerRow

0 commit comments

Comments
 (0)