99import React , { useEffect , useState } from 'react' ;
1010import { createPlugin } from '@mapstore/framework/utils/PluginsUtils' ;
1111import { connect } from 'react-redux' ;
12- import { createStructuredSelector } from 'reselect' ;
12+ import { createStructuredSelector , createSelector } from 'reselect' ;
1313import PropTypes from 'prop-types' ;
14- import { requestResource , setResource } from '@js/actions/gnresource' ;
14+
1515import controls from '@mapstore/framework/reducers/controls' ;
1616import config from '@mapstore/framework/reducers/config' ;
17- import gnresource from '@js/reducers/gnresource' ;
18- import {
19- getResourceData ,
20- getResourceLoading ,
21- getResourceDirtyState ,
22- canEditPermissions
23- } from '@js/selectors/resource' ;
2417import usePluginItems from '@mapstore/framework/hooks/usePluginItems' ;
25- import tabComponents from './containers/tabComponents ' ;
18+ import { mapInfoSelector } from '@mapstore/framework/selectors/map ' ;
2619import ResourcesPanelWrapper from '@mapstore/framework/plugins/ResourcesCatalog/components/ResourcesPanelWrapper' ;
2720import TargetSelectorPortal from '@mapstore/framework/plugins/ResourcesCatalog/components/TargetSelectorPortal' ;
2821import useResourcePanelWrapper from '@mapstore/framework/plugins/ResourcesCatalog/hooks/useResourcePanelWrapper' ;
2922import { getShowDetails } from '@mapstore/framework/plugins/ResourcesCatalog/selectors/resources' ;
30- import { setShowDetails , setSelectedResource } from '@mapstore/framework/plugins/ResourcesCatalog/actions/resources' ;
23+ import { setShowDetails , setSelectedResource , setDetailPanelTab } from '@mapstore/framework/plugins/ResourcesCatalog/actions/resources' ;
3124import PendingStatePrompt from '@mapstore/framework/plugins/ResourcesCatalog/containers/PendingStatePrompt' ;
32- import DetailsPanel from './containers/DetailsPanel' ;
25+ import Button from '@mapstore/framework/components/layout/Button' ;
26+ import Message from '@mapstore/framework/components/I18N/Message' ;
27+
28+ import {
29+ getResourceData ,
30+ getResourceLoading ,
31+ getResourceDirtyState ,
32+ canEditPermissions ,
33+ isNewResource ,
34+ getResourceId
35+ } from '@js/selectors/resource' ;
36+ import { requestResource , setResource } from '@js/actions/gnresource' ;
37+ import gnresource from '@js/reducers/gnresource' ;
3338import useDetectClickOut from '@js/hooks/useDetectClickOut' ;
39+ import tabComponents from '@js/plugins/ResourceDetails/containers/tabComponents' ;
40+ import DetailsPanel from '@js/plugins/ResourceDetails/containers/DetailsPanel' ;
3441
3542/**
3643* @module ResourceDetails
@@ -215,7 +222,7 @@ function ResourceDetailsPanel({
215222 "items" : "{({extent: context.get(state('gnResourceData'), 'extent')})}"
216223 } ,
217224 {
218- "type" : "linked-resources " ,
225+ "type" : "relations " ,
219226 "id" : "related" ,
220227 "labelId" : "gnviewer.linkedResources.label" ,
221228 "items" : "{context.get(state('gnResourceData'), 'linkedResources')}"
@@ -234,11 +241,18 @@ function ResourceDetailsPanel({
234241 "disableIf" : "{context.get(state('gnResourceData'), 'resource_type') !== 'dataset'}" ,
235242 "items" : "{context.get(state('gnResourceData'), 'attribute_set')}"
236243 } ,
244+ {
245+ "type" : "share" ,
246+ "id" : "share" ,
247+ "labelId" : "gnviewer.share" ,
248+ "disableIf" : "{!context.canAccessPermissions(state('gnResourceData'))}" ,
249+ "items" : [ true ]
250+ } ,
237251 {
238252 "type" : "settings" ,
239253 "id" : "settings" ,
240- "labelId" : "gnviewer.management " ,
241- "disableIf" : "{!context.canManageResourceSettings(state('gnResourceData')) && !context.canAccessPermissions(state('gnResourceData')) }" ,
254+ "labelId" : "gnviewer.settings " ,
255+ "disableIf" : "{!context.canManageResourceSettings(state('gnResourceData'))}" ,
242256 "items" : [ true ]
243257 }
244258 ] ,
@@ -389,7 +403,7 @@ const ResourceDetailsPlugin = connect(
389403export default createPlugin ( 'ResourceDetails' , {
390404 component : ResourceDetailsPlugin ,
391405 containers : {
392- ActionNavbar : {
406+ ActionNavbar : [ {
393407 name : 'ResourceDetailsButton' ,
394408 Component : connect ( ( state ) => ( { resource : getResourceData ( state ) } ) , { onShow : setShowDetails } ) ( ( { component, resourcesGridId, onShow, resource } ) => {
395409 if ( ! resource ?. pk ) return null ;
@@ -409,7 +423,37 @@ export default createPlugin('ResourceDetails', {
409423 } ) ,
410424 priority : 1 ,
411425 doNotHide : true
412- } ,
426+ } , {
427+ name : 'ShareActionButton' ,
428+ Component : connect (
429+ createSelector (
430+ isNewResource ,
431+ getResourceId ,
432+ mapInfoSelector ,
433+ ( isNew , resourceId , mapInfo ) => ( {
434+ enabled : ! isNew && ( resourceId || mapInfo ?. id )
435+ } )
436+ ) ,
437+ {
438+ onSelectTab : setDetailPanelTab ,
439+ onShowDetails : setShowDetails
440+ }
441+ ) ( ( { enabled, size, onSelectTab, onShowDetails } ) => {
442+ return enabled
443+ ? < Button
444+ size = { size }
445+ onClick = { ( ) => {
446+ onShowDetails ( true ) ;
447+ onSelectTab ( 'share' ) ;
448+ } }
449+ >
450+ < Message msgId = "share.title" />
451+ </ Button >
452+ : null ;
453+ } ) ,
454+ priority : 1 ,
455+ doNotHide : true
456+ } ] ,
413457 ResourcesGrid : {
414458 priority : 2 ,
415459 target : 'card-buttons' ,
0 commit comments