export type MultiselectToolbarProps = {
checkedList: TCheckedList;
selectedUuid: string | null
- resources: ResourcesState;
+ iconProps: IconProps
executeMulti: (action: ContextMenuAction, checkedList: TCheckedList, resources: ResourcesState) => void;
- favorites: FavoritesState
};
+type IconProps = {
+ resources: ResourcesState;
+ favorites: FavoritesState
+}
+
export const MultiselectToolbar = connect(
mapStateToProps,
mapDispatchToProps
)(
withStyles(styles)((props: MultiselectToolbarProps & WithStyles<CssRules>) => {
- const { classes, checkedList, resources, selectedUuid: singleSelectedUuid, favorites } = props;
+ const { classes, checkedList, selectedUuid: singleSelectedUuid, iconProps } = props;
const currentResourceKinds = Array.from(selectedToKindSet(checkedList));
const currentPathIsTrash = window.location.pathname === "/trash";
action.hasAlts ? (
<Tooltip
className={classes.button}
- title={action.useAlts(singleSelectedUuid, resources, favorites) ? action.altName: action.name}
+ title={action.useAlts(singleSelectedUuid, iconProps) ? action.altName: action.name}
key={i}
disableFocusListener
>
- <IconButton onClick={() => props.executeMulti(action, checkedList, resources)}>
- {action.useAlts(singleSelectedUuid, resources, favorites) ? action.altIcon && action.altIcon({}): action.icon({})}
+ <IconButton onClick={() => props.executeMulti(action, checkedList, iconProps.resources)}>
+ {action.useAlts(singleSelectedUuid, iconProps) ? action.altIcon && action.altIcon({}): action.icon({})}
</IconButton>
</Tooltip>
) : (
key={i}
disableFocusListener
>
- <IconButton onClick={() => props.executeMulti(action, checkedList, resources)}>{action.icon({})}</IconButton>
+ <IconButton onClick={() => props.executeMulti(action, checkedList, iconProps.resources)}>{action.icon({})}</IconButton>
</Tooltip>
)
)
//--------------------------------------------------//
-function mapStateToProps(state: RootState) {
+function mapStateToProps({multiselect, resources, favorites}: RootState) {
return {
- checkedList: state.multiselect.checkedList as TCheckedList,
- selectedUuid: isExactlyOneSelected(state.multiselect.checkedList),
- resources: state.resources,
- favorites: state.favorites
- };
+ checkedList: multiselect.checkedList as TCheckedList,
+ selectedUuid: isExactlyOneSelected(multiselect.checkedList),
+ iconProps: {
+ resources,
+ favorites
+ }
+ }
}
function mapDispatchToProps(dispatch: Dispatch) {
altName: 'Remove from Favorites',
altIcon: RemoveFavoriteIcon,
isForMulti: false,
- useAlts: (uuid, resources, favorites) => {
- return checkFavorite(uuid, favorites);
+ useAlts: (uuid, iconProps) => {
+ return checkFavorite(uuid, iconProps.favorites);
},
execute: (dispatch, resources) => {
dispatch(toggleFavorite(resources[0])).then(() => {
altName: 'Restore from Trash',
altIcon: RestoreFromTrashIcon,
isForMulti: true,
- useAlts: (uuid, resources, favorites = []) => {
- return uuid ? (getResource(uuid)(resources) as any).isTrashed : false;
+ useAlts: (uuid, iconProps) => {
+ return uuid ? (getResource(uuid)(iconProps.resources) as any).isTrashed : false;
},
execute: (dispatch, resources) => {
for (const resource of [...resources]) {
altName: 'Unfreeze Project',
altIcon: UnfreezeIcon,
isForMulti: false,
- useAlts: () => false,
+ useAlts: (uuid, iconProps) => {
+ return uuid ? !!(getResource(uuid)(iconProps.resources) as any).frozenByUuid : false;
+ },
execute: (dispatch, resources) => {
- if (resources[0].isFrozen) {
+ if (resources[0].frozenByUuid) {
dispatch(unfreezeProject(resources[0].uuid));
} else {
dispatch(freezeProject(resources[0].uuid));