From fa4f9de211e3eacdc634f37ad5d494e8c706e493 Mon Sep 17 00:00:00 2001 From: Robert Rytovuori Date: Fri, 3 May 2024 09:51:50 +0300 Subject: [PATCH 1/8] move service unit filter next to basic search in leases view --- src/leases/components/search/Search.js | 43 +++++++++++++------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/src/leases/components/search/Search.js b/src/leases/components/search/Search.js index 146ec4a7b..d2eeac1ef 100644 --- a/src/leases/components/search/Search.js +++ b/src/leases/components/search/Search.js @@ -236,6 +236,27 @@ class Search extends PureComponent { /> + + + Palvelukokonaisuus + + + + + {!isBasicSearch && @@ -737,28 +758,6 @@ class Search extends PureComponent { /> - - - - Palvelukokonaisuus - - - - - From 868219bb1192335ab017a6710bf45b18975ff29c Mon Sep 17 00:00:00 2001 From: Robert Rytovuori Date: Fri, 10 May 2024 15:03:47 +0300 Subject: [PATCH 2/8] move service unit filter to suodatus component --- src/components/table/TableFilters.js | 3 ++ src/leases/components/LeaseListPage.js | 58 +++++++++++++++++++------- src/leases/components/search/Search.js | 23 +--------- 3 files changed, 47 insertions(+), 37 deletions(-) diff --git a/src/components/table/TableFilters.js b/src/components/table/TableFilters.js index 5a606d138..48dcc337c 100644 --- a/src/components/table/TableFilters.js +++ b/src/components/table/TableFilters.js @@ -10,6 +10,7 @@ type Props = { filterOptions: Array, filterValue: Array, onFilterChange?: Function, + componentToRenderNextToLabel?: React$Node, } const TableFilters = ({ alignFiltersRight, @@ -17,6 +18,7 @@ const TableFilters = ({ filterOptions, filterValue, onFilterChange, + componentToRenderNextToLabel = null }: Props): React$Node => { const handleFilterChange = (values: Array) => { if(onFilterChange) { @@ -33,6 +35,7 @@ const TableFilters = ({ {!!filterOptions.length &&

Suodatus

} + {!!componentToRenderNextToLabel && componentToRenderNextToLabel} , } class LeaseListPage extends PureComponent { @@ -142,6 +150,7 @@ class LeaseListPage extends PureComponent { sortKey: DEFAULT_SORT_KEY, sortOrder: DEFAULT_SORT_ORDER, visualizationType: VisualizationTypes.TABLE, + serviceUnitOptions: [], } static contextTypes = { @@ -157,6 +166,7 @@ class LeaseListPage extends PureComponent { lessors, receiveTopNavigationSettings, serviceUnits, + leaseAttributes } = this.props; setPageTitle('Vuokraukset'); @@ -179,12 +189,14 @@ class LeaseListPage extends PureComponent { window.addEventListener('popstate', this.handlePopState); this._isMounted = true; + + this.setState({serviceUnitOptions: getFieldOptions(leaseAttributes, 'service_unit', true)}); } componentDidUpdate(prevProps) { - const {location: {search: currentSearch}, userActiveServiceUnit} = this.props; + const {location: {search: currentSearch}, userActiveServiceUnit, leaseAttributes} = this.props; const {visualizationType} = this.state; - const {location: {search: prevSearch}, userActiveServiceUnit: prevUserActiveServiceUnit} = prevProps; + const {location: {search: prevSearch}} = prevProps; const initializeSearch = () => { const searchQuery = getUrlParams(currentSearch); @@ -218,16 +230,19 @@ class LeaseListPage extends PureComponent { initializeSearch(); this._hasFetchedLeases = true; - } else if(userActiveServiceUnit !== prevUserActiveServiceUnit - && !currentSearch.includes('service_unit')) { - // Search again after changing user active service unit only if not explicitly setting the service unit filter - searchByType(); } } if (currentSearch !== prevSearch) { searchByType(); } + + if ( + this.props.leaseAttributes?.service_unit && + leaseAttributes?.service_unit?.choices.length !== prevProps.leaseAttributes?.service_unit?.choices.length + ) { + this.setState({serviceUnitOptions: getFieldOptions(leaseAttributes, 'service_unit', true)}); + } } componentWillUnmount() { @@ -256,7 +271,7 @@ class LeaseListPage extends PureComponent { } setSearchFormValues = () => { - const {location: {search}, initialize, userActiveServiceUnit} = this.props; + const {location: {search}, initialize} = this.props; const searchQuery = getUrlParams(search); const page = searchQuery.page ? Number(searchQuery.page) : 1; const states = this.getLeaseStates(searchQuery); @@ -272,8 +287,8 @@ class LeaseListPage extends PureComponent { ? searchQuery.tenantcontact_type : searchQuery.tenantcontact_type ? [searchQuery.tenantcontact_type] : []; - if(initialValues.service_unit === undefined && userActiveServiceUnit) { - initialValues.service_unit = userActiveServiceUnit.id; + if (initialValues.service_unit === undefined) { + initialValues.service_unit = ""; } if(onlyActiveLeases != undefined) { @@ -319,7 +334,7 @@ class LeaseListPage extends PureComponent { } search = () => { - const {fetchLeases, location: {search}, userActiveServiceUnit} = this.props; + const {fetchLeases, location: {search}} = this.props; const searchQuery = getUrlParams(search); const page = searchQuery.page ? Number(searchQuery.page) : 1; const leaseStates = this.getLeaseStates(searchQuery); @@ -340,8 +355,8 @@ class LeaseListPage extends PureComponent { searchQuery.sort_key = searchQuery.sort_key || DEFAULT_SORT_KEY; searchQuery.sort_order = searchQuery.sort_order || DEFAULT_SORT_ORDER; - if(searchQuery.service_unit === undefined && userActiveServiceUnit) { - searchQuery.service_unit = userActiveServiceUnit.id; + if(searchQuery.service_unit === undefined) { + searchQuery.service_unit = ""; } searchQuery.limit = LIST_TABLE_PAGE_SIZE; @@ -354,7 +369,7 @@ class LeaseListPage extends PureComponent { } searchByBBox = () => { - const {fetchLeasesByBBox, location: {search}, userActiveServiceUnit} = this.props; + const {fetchLeasesByBBox, location: {search}} = this.props; const searchQuery = getUrlParams(search); const leaseStates = this.getLeaseStates(searchQuery); const onlyActiveLeases = this.getOnlyActiveLeasesValue(searchQuery); @@ -371,8 +386,8 @@ class LeaseListPage extends PureComponent { searchQuery.lease_state = leaseStates; } - if(searchQuery.service_unit === undefined && userActiveServiceUnit) { - searchQuery.service_unit = userActiveServiceUnit.id; + if(searchQuery.service_unit === undefined) { + searchQuery.service_unit = ""; } searchQuery.limit = 10000; @@ -430,6 +445,10 @@ class LeaseListPage extends PureComponent { }); } + handleServiceUnitChange = (e : Object) => { + this.handleSearchChange({service_unit: e.target.value}, true); + } + handleRowClick = (id) => { const {history, location: {search}} = this.props; @@ -578,6 +597,7 @@ class LeaseListPage extends PureComponent { sortKey, sortOrder, visualizationType, + serviceUnitOptions } = this.state; const { createLease, @@ -600,6 +620,13 @@ class LeaseListPage extends PureComponent { if(!isMethodAllowed(leaseMethods, Methods.GET)) return ; + const serviceUnitFilter =
+ Palvelukokonaisuus + +
+ return ( @@ -635,6 +662,7 @@ class LeaseListPage extends PureComponent { filterOptions={leaseStateFilterOptions} filterValue={leaseStates} onFilterChange={this.handleLeaseStatesChange} + componentToRenderNextToLabel={serviceUnitFilter} /> } visualizationComponent={ diff --git a/src/leases/components/search/Search.js b/src/leases/components/search/Search.js index d2eeac1ef..7b8dce9d0 100644 --- a/src/leases/components/search/Search.js +++ b/src/leases/components/search/Search.js @@ -105,7 +105,7 @@ class Search extends PureComponent { newState.municipalityOptions = getFieldOptions(props.leaseAttributes, LeaseFieldPaths.MUNICIPALITY); newState.tenantTypeOptions = getFieldOptions(props.leaseAttributes, LeaseTenantContactSetFieldPaths.TYPE, false); newState.typeOptions = getFieldOptions(props.leaseAttributes, LeaseFieldPaths.TYPE); - newState.serviceUnitOptions = getFieldOptions(props.leaseAttributes, 'service_unit', true); + //newState.serviceUnitOptions = getFieldOptions(props.leaseAttributes, 'service_unit', true); } if(props.lessors !== state.lessors) { @@ -236,27 +236,6 @@ class Search extends PureComponent { /> - - - Palvelukokonaisuus - - - - - {!isBasicSearch && From 33e3f52805a7b45df1d8f87a92a4dd09db3a4e60 Mon Sep 17 00:00:00 2001 From: Robert Rytovuori Date: Tue, 14 May 2024 10:05:56 +0300 Subject: [PATCH 3/8] move service unit filter into suodatus component --- src/leases/components/LeaseListPage.js | 36 +++++++++++++++++++------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/src/leases/components/LeaseListPage.js b/src/leases/components/LeaseListPage.js index 99c927d9d..374e195b3 100644 --- a/src/leases/components/LeaseListPage.js +++ b/src/leases/components/LeaseListPage.js @@ -10,6 +10,7 @@ import isArray from 'lodash/isArray'; import isEmpty from 'lodash/isEmpty'; import {FieldTypes} from '$src/enums'; +import FieldTypeSelect from '$components/form/FieldTypeSelect'; import SearchContainer from '$components/search/SearchContainer'; import FormField from '$components/form/FormField'; import SearchInputColumn from '$components/search/SearchInputColumn'; @@ -134,6 +135,7 @@ type State = { sortOrder: string, visualizationType: string, serviceUnitOptions: Array, + selectedServiceUnitOptionValue: mixed // empty string if no value, otherwise number } class LeaseListPage extends PureComponent { @@ -151,6 +153,7 @@ class LeaseListPage extends PureComponent { sortOrder: DEFAULT_SORT_ORDER, visualizationType: VisualizationTypes.TABLE, serviceUnitOptions: [], + selectedServiceUnitOptionValue: '' } static contextTypes = { @@ -237,6 +240,7 @@ class LeaseListPage extends PureComponent { searchByType(); } + // Update service unit options if they have changed if ( this.props.leaseAttributes?.service_unit && leaseAttributes?.service_unit?.choices.length !== prevProps.leaseAttributes?.service_unit?.choices.length @@ -289,6 +293,8 @@ class LeaseListPage extends PureComponent { if (initialValues.service_unit === undefined) { initialValues.service_unit = ""; + } else { + this.setState({selectedServiceUnitOptionValue: initialValues.service_unit}); } if(onlyActiveLeases != undefined) { @@ -445,8 +451,9 @@ class LeaseListPage extends PureComponent { }); } - handleServiceUnitChange = (e : Object) => { - this.handleSearchChange({service_unit: e.target.value}, true); + handleServiceUnitChange = (value : mixed) => { + this.handleSearchChange({service_unit: value}, false); + this.setState({selectedServiceUnitOptionValue: value}); } handleRowClick = (id) => { @@ -597,7 +604,8 @@ class LeaseListPage extends PureComponent { sortKey, sortOrder, visualizationType, - serviceUnitOptions + serviceUnitOptions, + selectedServiceUnitOptionValue } = this.state; const { createLease, @@ -620,12 +628,22 @@ class LeaseListPage extends PureComponent { if(!isMethodAllowed(leaseMethods, Methods.GET)) return ; - const serviceUnitFilter =
- Palvelukokonaisuus - -
+ const serviceUnitFilter = + + Palvelukokonaisuus + + + {}, value: selectedServiceUnitOptionValue}} + isDirty={false} + options={serviceUnitOptions} + placeholder="" + setRefForField={() => {}} /> + + return ( From b0255bd5f39d34cc32185e43eefcbb4b4d10b8b5 Mon Sep 17 00:00:00 2001 From: Robert Rytovuori Date: Tue, 14 May 2024 10:08:16 +0300 Subject: [PATCH 4/8] rename componentToRenderNextToLabel to ...UnderLabel --- src/components/table/TableFilters.js | 6 +++--- src/leases/components/LeaseListPage.js | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/table/TableFilters.js b/src/components/table/TableFilters.js index 48dcc337c..3017e3748 100644 --- a/src/components/table/TableFilters.js +++ b/src/components/table/TableFilters.js @@ -10,7 +10,7 @@ type Props = { filterOptions: Array, filterValue: Array, onFilterChange?: Function, - componentToRenderNextToLabel?: React$Node, + componentToRenderUnderLabel?: React$Node, } const TableFilters = ({ alignFiltersRight, @@ -18,7 +18,7 @@ const TableFilters = ({ filterOptions, filterValue, onFilterChange, - componentToRenderNextToLabel = null + componentToRenderUnderLabel = null }: Props): React$Node => { const handleFilterChange = (values: Array) => { if(onFilterChange) { @@ -35,7 +35,7 @@ const TableFilters = ({ {!!filterOptions.length &&

Suodatus

} - {!!componentToRenderNextToLabel && componentToRenderNextToLabel} + {!!componentToRenderUnderLabel && componentToRenderUnderLabel} { filterOptions={leaseStateFilterOptions} filterValue={leaseStates} onFilterChange={this.handleLeaseStatesChange} - componentToRenderNextToLabel={serviceUnitFilter} + componentToRenderUnderLabel={serviceUnitFilter} /> } visualizationComponent={ From f237ac0c5bbbd8809cd4202832ebf866b601251c Mon Sep 17 00:00:00 2001 From: Robert Rytovuori Date: Tue, 14 May 2024 10:21:09 +0300 Subject: [PATCH 5/8] change palvelukokonaisuus in top navigation to oma palvelukokonaisuus --- src/components/inputs/UserServiceUnitSelectInput.js | 2 +- src/components/topNavigation/TopNavigation.js | 2 +- src/leases/components/LeaseListPage.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/inputs/UserServiceUnitSelectInput.js b/src/components/inputs/UserServiceUnitSelectInput.js index 006bd08b4..a1497ed93 100644 --- a/src/components/inputs/UserServiceUnitSelectInput.js +++ b/src/components/inputs/UserServiceUnitSelectInput.js @@ -57,7 +57,7 @@ class UserServiceUnitSelectInput extends Component { - Palvelukokonaisuus + Oma palvelukokonaisuus
diff --git a/src/components/topNavigation/TopNavigation.js b/src/components/topNavigation/TopNavigation.js index d50dc3aab..c5d02fd57 100644 --- a/src/components/topNavigation/TopNavigation.js +++ b/src/components/topNavigation/TopNavigation.js @@ -198,7 +198,7 @@ class TopNavigation extends Component { ) : (
-
Palvelukokonaisuus
+
Oma palvelukokonaisuus
{userActiveServiceUnit.name}
)} diff --git a/src/leases/components/LeaseListPage.js b/src/leases/components/LeaseListPage.js index 1f432c803..6cb746ddb 100644 --- a/src/leases/components/LeaseListPage.js +++ b/src/leases/components/LeaseListPage.js @@ -630,7 +630,7 @@ class LeaseListPage extends PureComponent { const serviceUnitFilter = - Palvelukokonaisuus + {LeaseFieldTitles.SERVICE_UNIT} Date: Tue, 14 May 2024 10:42:56 +0300 Subject: [PATCH 6/8] fix issue where detailed search is cleared when service unit filter changes --- src/leases/components/LeaseListPage.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/leases/components/LeaseListPage.js b/src/leases/components/LeaseListPage.js index 6cb746ddb..c886e76cc 100644 --- a/src/leases/components/LeaseListPage.js +++ b/src/leases/components/LeaseListPage.js @@ -452,7 +452,12 @@ class LeaseListPage extends PureComponent { } handleServiceUnitChange = (value : mixed) => { - this.handleSearchChange({service_unit: value}, false); + const {location: {search}} = this.props; + + // get other form values from query params + const query = getUrlParams(search); + + this.handleSearchChange(Object.assign(query, {service_unit: value})); this.setState({selectedServiceUnitOptionValue: value}); } From 2eb25dc74efdf5363082fe77d39d8b38f8259245 Mon Sep 17 00:00:00 2001 From: Robert Rytovuori Date: Wed, 15 May 2024 14:22:36 +0300 Subject: [PATCH 7/8] rename to componentToRenderUnderTitle --- src/components/table/TableFilters.js | 6 +++--- src/leases/components/LeaseListPage.js | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/table/TableFilters.js b/src/components/table/TableFilters.js index 3017e3748..9feb5175a 100644 --- a/src/components/table/TableFilters.js +++ b/src/components/table/TableFilters.js @@ -10,7 +10,7 @@ type Props = { filterOptions: Array, filterValue: Array, onFilterChange?: Function, - componentToRenderUnderLabel?: React$Node, + componentToRenderUnderTitle?: React$Node, } const TableFilters = ({ alignFiltersRight, @@ -18,7 +18,7 @@ const TableFilters = ({ filterOptions, filterValue, onFilterChange, - componentToRenderUnderLabel = null + componentToRenderUnderTitle = null }: Props): React$Node => { const handleFilterChange = (values: Array) => { if(onFilterChange) { @@ -35,7 +35,7 @@ const TableFilters = ({ {!!filterOptions.length &&

Suodatus

} - {!!componentToRenderUnderLabel && componentToRenderUnderLabel} + {!!componentToRenderUnderTitle && componentToRenderUnderTitle} { filterOptions={leaseStateFilterOptions} filterValue={leaseStates} onFilterChange={this.handleLeaseStatesChange} - componentToRenderUnderLabel={serviceUnitFilter} + componentToRenderUnderTitle={serviceUnitFilter} /> } visualizationComponent={ From 8bc1fdbf1df60603d4c6aa9235bf3fe31dd1bf94 Mon Sep 17 00:00:00 2001 From: Robert Rytovuori Date: Wed, 15 May 2024 14:28:14 +0300 Subject: [PATCH 8/8] detailed search view should not render when the service unit filter is being modified --- src/leases/components/search/Search.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/leases/components/search/Search.js b/src/leases/components/search/Search.js index 7b8dce9d0..a0b5e9855 100644 --- a/src/leases/components/search/Search.js +++ b/src/leases/components/search/Search.js @@ -105,7 +105,6 @@ class Search extends PureComponent { newState.municipalityOptions = getFieldOptions(props.leaseAttributes, LeaseFieldPaths.MUNICIPALITY); newState.tenantTypeOptions = getFieldOptions(props.leaseAttributes, LeaseTenantContactSetFieldPaths.TYPE, false); newState.typeOptions = getFieldOptions(props.leaseAttributes, LeaseFieldPaths.TYPE); - //newState.serviceUnitOptions = getFieldOptions(props.leaseAttributes, 'service_unit', true); } if(props.lessors !== state.lessors) { @@ -156,6 +155,7 @@ class Search extends PureComponent { delete searchQuery.in_bbox; delete searchQuery.visualization; delete searchQuery.zoom; + delete searchQuery.service_unit; const keys = Object.keys(searchQuery);