Skip to content

Commit

Permalink
feat(publish): initial support for dataset publication
Browse files Browse the repository at this point in the history
proof-of-concept publish button
  • Loading branch information
b5 committed Aug 28, 2019
1 parent cfcad2d commit 6399545
Show file tree
Hide file tree
Showing 7 changed files with 76 additions and 13 deletions.
20 changes: 19 additions & 1 deletion app/actions/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@ export function fetchMyDatasets (page: number = 1, pageSize: number = pageSizeDe
peername: ref.peername,
name: ref.name,
path: ref.path,
isLinked: !!ref.fsiPath
isLinked: !!ref.fsiPath,
published: ref.published
}))
}
}
Expand Down Expand Up @@ -413,3 +414,20 @@ export function initDatasetAndFetch (filepath: string, name: string, format: str
return response
}
}

export function publishDataset (peername: string, name: string): ApiActionThunk {
return async (dispatch) => {
const action = {
type: 'publish',
[CALL_API]: {
endpoint: 'publish',
method: 'POST',
segments: {
peername,
name
}
}
}
return dispatch(action)
}
}
5 changes: 3 additions & 2 deletions app/actions/selections.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,14 @@ export const setSelectedListItem = (type: string, selectedListItem: string) => {
}
}

export const setWorkingDataset = (peername: string, name: string, isLinked: boolean) => {
export const setWorkingDataset = (peername: string, name: string, isLinked: boolean, published: boolean) => {
return {
type: SELECTIONS_SET_WORKING_DATASET,
payload: {
peername,
name,
isLinked
isLinked,
published
}
}
}
39 changes: 37 additions & 2 deletions app/components/Dataset.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ export interface DatasetProps {
setSidebarWidth: (type: string, sidebarWidth: number) => Action
setFilter: (filter: string) => Action
setSelectedListItem: (type: string, activeTab: string) => Action
setWorkingDataset: (peername: string, name: string, isLinked: boolean) => Action
setWorkingDataset: (peername: string, name: string, isLinked: boolean, published: boolean) => Action
publishDataset: (peername: string, name: string) => Action
fetchWorkingDatasetDetails: () => Promise<ApiAction>
fetchWorkingHistory: (page?: number, pageSize?: number) => ApiActionThunk
fetchWorkingStatus: () => Promise<ApiAction>
Expand Down Expand Up @@ -167,7 +168,8 @@ export default class Dataset extends React.Component<DatasetProps> {
activeTab,
component: selectedComponent,
commit: selectedCommit,
isLinked
isLinked,
published
} = selections

const { history, status, path } = workingDataset
Expand All @@ -179,6 +181,7 @@ export default class Dataset extends React.Component<DatasetProps> {
setSidebarWidth,
setSelectedListItem,
fetchWorkingHistory,
publishDataset,
signout
} = this.props

Expand Down Expand Up @@ -208,6 +211,37 @@ export default class Dataset extends React.Component<DatasetProps> {
</div>
)

let publishButton
if (username === workingDataset.peername) {
publishButton = published ? (
<div
className='header-column'
data-tip={`http://localhost:3000/${workingDataset.peername}/${workingDataset.name}`}
onClick={() => { shell.openExternal(`http://localhost:3000/${workingDataset.peername}/${workingDataset.name}`) }}
>
<div className='header-column-icon'>
<FontAwesomeIcon icon={faFolderOpen} size='lg'/>
</div>
<div className='header-column-text'>
<div className='label'>Show on Web</div>
</div>
</div>
) : (
<div
className='header-column'
data-tip={workingDataset.linkpath}
onClick={() => { publishDataset(workingDataset.peername, workingDataset.name) }}
>
<div className='header-column-icon'>
<FontAwesomeIcon icon={faFolderOpen} size='lg'/>
</div>
<div className='header-column-text'>
<div className='label'>Publish</div>
</div>
</div>
)
}

const UserMenu = () => {
const [showMenu, setShowMenu] = React.useState(false)

Expand Down Expand Up @@ -264,6 +298,7 @@ export default class Dataset extends React.Component<DatasetProps> {

</div>
{linkButton}
{publishButton}
<UserMenu />
</div>
<div className='columns'>
Expand Down
8 changes: 5 additions & 3 deletions app/components/DatasetList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ interface DatasetListProps {
myDatasets: MyDatasets
workingDataset: WorkingDataset
setFilter: (filter: string) => Action
setWorkingDataset: (peername: string, name: string, isLinked: boolean) => Action
setWorkingDataset: (peername: string, name: string, isLinked: boolean, published: boolean) => Action
fetchMyDatasets: (page: number, pageSize: number) => Promise<AnyAction>
setModal: (modal: Modal) => void
}
Expand Down Expand Up @@ -50,14 +50,16 @@ export default class DatasetList extends React.Component<DatasetListProps> {
return true
})

console.log(filteredDatasets)

const listContent = filteredDatasets.length > 0
? filteredDatasets.map(({ peername, name, title, isLinked }) => (
? filteredDatasets.map(({ peername, name, title, isLinked, published }) => (
<div
key={`${peername}/${name}`}
className={classNames('sidebar-list-item', 'sidebar-list-item-text', {
'selected': (peername === workingDataset.peername) && (name === workingDataset.name)
})}
onClick={() => setWorkingDataset(peername, name, isLinked)}
onClick={() => setWorkingDataset(peername, name, isLinked, published)}
>
<div className='text-column'>
<div className='text'>{title}</div>
Expand Down
4 changes: 3 additions & 1 deletion app/containers/DatasetContainer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ import { toggleDatasetList, setSidebarWidth, signout } from '../actions/ui'
import {
fetchWorkingDatasetDetails,
fetchWorkingStatus,
fetchWorkingHistory
fetchWorkingHistory,
publishDataset
} from '../actions/api'
import {
setActiveTab,
Expand Down Expand Up @@ -57,6 +58,7 @@ const DatasetContainer = connect(
fetchWorkingDatasetDetails,
fetchWorkingStatus,
fetchWorkingHistory,
publishDataset,
signout
},
mergeProps
Expand Down
2 changes: 2 additions & 0 deletions app/models/store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ export interface Selections {
peername: string | null
name: string | null
isLinked: boolean
published: boolean
activeTab: string
component: SelectedComponent
commit: string
Expand All @@ -87,6 +88,7 @@ export interface DatasetSummary {
name: string
path: string
isLinked: boolean
published: boolean
}

// list of local datasets
Expand Down
11 changes: 7 additions & 4 deletions app/reducers/selections.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ const initialState: Selections = {
peername: localStore().getItem('peername') || '',
name: localStore().getItem('name') || '',
isLinked: localStore().getItem('isLinked') === 'true',
published: localStore().getItem('published') === 'true',
activeTab: localStore().getItem('activeTab') || 'status',
component: localStore().getItem('component') as SelectedComponent || '',
commit: localStore().getItem('commit') || '',
Expand Down Expand Up @@ -44,21 +45,23 @@ export default (state = initialState, action: AnyAction) => {
return state

case SELECTIONS_SET_WORKING_DATASET:
const { peername, name, isLinked } = action.payload
const { peername, name, isLinked, published } = action.payload
localStore().setItem('peername', peername)
localStore().setItem('name', name)
localStore().setItem('isLinked', isLinked)
return Object.assign({}, state, { peername, name, isLinked })
localStore().setItem('published', published)
return Object.assign({}, state, { peername, name, isLinked, published })

case LIST_SUCC:
// if there is no peername + name in selections, use the first one on the list
if (state.peername === '' && state.name === '') {
if (action.payload.data.length === 0) return state
const { peername: firstPeername, name: firstName, isLinked: firstIsLinked } = action.payload.data[0]
const { peername: firstPeername, name: firstName, isLinked: firstIsLinked, published } = action.payload.data[0]
localStore().setItem('peername', firstPeername)
localStore().setItem('name', firstName)
localStore().setItem('isLinked', firstIsLinked)
return Object.assign({}, state, { peername: firstPeername, name: firstName, isLinked: firstIsLinked })
localStore().setItem('published', published)
return Object.assign({}, state, { peername: firstPeername, name: firstName, isLinked: firstIsLinked, published })
} else {
return state
}
Expand Down

0 comments on commit 6399545

Please sign in to comment.