Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace settings modals with tabbed portal table configuration modal #6245

Merged
merged 27 commits into from
Apr 13, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
5b8bdac
Implement column modal service
oliverguenther Apr 5, 2018
1701750
Implement tab portal outlet with multiple attached views
oliverguenther Apr 5, 2018
38dbb18
onSave handler for active tab components
oliverguenther Apr 6, 2018
e2c0a8d
Implement sort by tab
oliverguenther Apr 6, 2018
355ef69
Implement grouping
oliverguenther Apr 9, 2018
3394434
Implement mode switching in display settings
oliverguenther Apr 9, 2018
d257401
Implement sums display
oliverguenther Apr 9, 2018
3d8eff2
Implement timeline labels
oliverguenther Apr 9, 2018
d0acc07
Remove modals from dropdown
oliverguenther Apr 9, 2018
7cc1d00
Add initial switching to another tab to portal outlet
oliverguenther Apr 9, 2018
424ca5f
Fix group by specs
oliverguenther Apr 9, 2018
e22f0bc
Fix hierarchy test helper
oliverguenther Apr 9, 2018
6e9d93f
Convert query-filters to ng2
oliverguenther Apr 9, 2018
32bf1c7
Fix specs
oliverguenther Apr 10, 2018
fa0338b
Restore old datepicker for ng1 edit fields
oliverguenther Apr 10, 2018
37910f9
Fix long-waiting selector usages on wp-table
oliverguenther Apr 10, 2018
cf80ddc
Fix tests
oliverguenther Apr 10, 2018
87db001
Enable filters tab in modal
oliverguenther Apr 11, 2018
a95047a
Lint
oliverguenther Apr 11, 2018
b0db9b0
Convert filter toggled multiselect test
oliverguenther Apr 11, 2018
16ea50a
Restore ng1 accessibly-by-keyboard for ng1 only directives
oliverguenther Apr 11, 2018
3ef2548
Merge remote-tracking branch 'origin/dev' into houskeeping/consolidat…
oliverguenther Apr 11, 2018
1836389
Fix more tests
oliverguenther Apr 11, 2018
15b29ea
Merge remote-tracking branch 'origin/dev' into houskeeping/consolidat…
oliverguenther Apr 12, 2018
afc152b
Actually save the filters
oliverguenther Apr 12, 2018
ab3384a
Add spec for table configuration modal filters
oliverguenther Apr 12, 2018
222bbfc
Merge remote-tracking branch 'origin/dev' into houskeeping/consolidat…
oliverguenther Apr 12, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
app/assets/vendor/* binary
36 changes: 14 additions & 22 deletions app/assets/stylesheets/content/_modal.sass
Original file line number Diff line number Diff line change
Expand Up @@ -107,28 +107,6 @@ $ng-modal-image-width: $ng-modal-image-height
.form--space.-left-spacing
padding-left: 1rem

#modal-sorting
min-height: 120px
.select2-container
float: left
margin-right: 20px
margin-bottom: 0px
@media(min-width: 1801px)
width: 300px
@media(max-width: 1800px)
width: 280px
@media(max-width: 1400px)
width: 230px
@media(max-width: 1100px)
width: 160px
@media(max-width: 800px)
width: 120px
label.option-label
float: left
margin-right: 20px
input
margin-top: 0px

.columns-modal-content
margin-bottom: 15px
label
Expand Down Expand Up @@ -254,3 +232,17 @@ ul.export-options

.modal--footer
justify-content: inherit

.wp-table--configuration-modal
min-height: 120px
max-height: 90vh
width: 75vh

label.option-label
float: left
margin-right: 20px
input
margin-top: 0px

.modal--form-actions
margin: 1em 0
3 changes: 2 additions & 1 deletion app/assets/stylesheets/content/_tabs.sass
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@

/***** Tabs ****

#content .tabs
#content .tabs,
.tabs--container
position: relative
height: 2.6em
margin-bottom: 1.2em
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
padding: 0 !important

// Shrink column of details / inline-create icons
.wp-table--context-menu-column
.wp-table--configuration-modal--trigger
width: 60px
// Center the th icon
text-align: center !important
Expand Down
2 changes: 1 addition & 1 deletion app/models/query.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
#++

class Query < ActiveRecord::Base
include ::Query::Timelines
include Timelines
include Queries::AvailableFilters

belongs_to :project
Expand Down
2 changes: 1 addition & 1 deletion app/models/query/timelines.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
#
# See docs/COPYRIGHT.rdoc for more details.
#++

#
module Query::Timelines
extend ActiveSupport::Concern

Expand Down
14 changes: 13 additions & 1 deletion config/locales/js-en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -357,6 +357,7 @@ en:
timelines:
gantt_chart: 'Gantt chart'
labels:
title: 'Label configuration'
bar: 'Bar labels'
left: 'Left'
right: 'Right'
Expand Down Expand Up @@ -540,7 +541,6 @@ en:
group: "Group by"
group_by_disabled_by_hierarchy: "Group by is disabled due to the hierarchy mode being active."
hierarchy_disabled_by_group_by: "Hierarchy mode is disabled due to results being grouped by %{column}."
hierarchy_mode: "Hierarchy mode"
sort_ascending: "Sort ascending"
sort_descending: "Sort descending"
move_column_left: "Move column left"
Expand All @@ -554,10 +554,22 @@ en:
not_found: "There is no such query"
text_no_results: "No matching queries were found."
table:
configure_button: 'Configure work package table'
summary: "Table with rows of work package and columns of work package attributes."
text_inline_edit: "Most cells of this table are buttons that activate inline-editing functionality of that attribute."
text_sort_hint: "With the links in the table headers you can sort, group, reorder, remove and add table columns."
text_select_hint: "Select boxes should be opened with 'ALT' and arrow keys."
table_configuration:
button: 'Configure this work package table'
modal_title: 'Work package table configuration'
display_settings: 'Display settings'
grouped_mode: "Grouped mode"
grouped_hint: "Table results will be grouped by the given attribute."
default_mode: "Default mode"
hierarchy_mode: "Hierarchy mode"
hierarchy_hint: "All filtered table results will be augmented with their ancestors. Hierarchies can be expanded and collapsed."
display_sums_hint: "Display sums of all summable attributes in a row below the table results."
show_timeline_hint: "Show an interactive gantt chart on the right side of the table. You can change its width by dragging the divider between table and gantt chart."
tabs:
overview: Overview
activity: Activity
Expand Down
92 changes: 69 additions & 23 deletions frontend/app/angular4-modules.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,11 @@
// See doc/COPYRIGHT.rdoc for more details.
// ++

import {InjectionToken, NgModule} from '@angular/core';
import {NgModule} from '@angular/core';
import {BrowserModule} from '@angular/platform-browser';
import {UpgradeModule} from '@angular/upgrade/static';
import {FormsModule} from '@angular/forms';
import {TablePaginationComponent} from 'core-app/components/table-pagination/table-pagination.component';
import {AccessibleByKeyboardDirectiveUpgraded} from 'core-app/ui_components/accessible-by-keyboard-directive-upgraded';
import {SimpleTemplateRenderer} from 'core-components/angular/simple-template-renderer';
import {OpIcon} from 'core-components/common/icon/op-icon';
import {WorkPackagesListComponent} from 'core-components/routing/wp-list/wp-list.component';
Expand All @@ -49,11 +48,8 @@ import {WorkPackageTableRelationColumnsService} from 'core-components/wp-fast-ta
import {WorkPackageTableSelection} from 'core-components/wp-fast-table/state/wp-table-selection.service';
import {WorkPackageTableSortByService} from 'core-components/wp-fast-table/state/wp-table-sort-by.service';
import {WorkPackageTableTimelineService} from 'core-components/wp-fast-table/state/wp-table-timeline.service';
import {
WorkPackageInlineCreateComponent,
} from 'core-components/wp-inline-create/wp-inline-create.component';
import {WorkPackageInlineCreateComponent,} from 'core-components/wp-inline-create/wp-inline-create.component';
import {KeepTabService} from 'core-components/wp-single-view-tabs/keep-tab/keep-tab.service';
import {WorkPackageRelationsService} from 'core-components/wp-relations/wp-relations.service';
import {WpResizerDirectiveUpgraded} from 'core-components/wp-resizer/wp-resizer.directive';
import {SortHeaderDirective} from 'core-components/wp-table/sort-header/sort-header.directive';
import {WorkPackageTablePaginationComponent} from 'core-components/wp-table/table-pagination/wp-table-pagination.component';
Expand All @@ -71,16 +67,19 @@ import {
$rootScopeToken,
$stateToken,
$timeoutToken,
columnsModalToken, exportModalToken,
FocusHelperToken, groupingModalToken,
halRequestToken, HalResourceToken,
exportModalToken,
FocusHelperToken,
halRequestToken,
HalResourceToken,
HookServiceToken,
I18nToken,
NotificationsServiceToken,
PathHelperToken, QueryFilterInstanceResourceToken, QueryResourceToken, saveModalToken,
settingsModalToken, shareModalToken,
sortingModalToken,
timelinesModalToken,
PathHelperToken,
QueryFilterInstanceResourceToken,
QueryResourceToken,
saveModalToken,
settingsModalToken,
shareModalToken,
TimezoneServiceToken,
upgradeService,
upgradeServiceWithToken, UrlParamsHelperServiceToken,
Expand Down Expand Up @@ -110,7 +109,6 @@ import {WorkPackageTimelineButtonComponent} from 'core-components/wp-buttons/wp-
import {WorkPackageZenModeButtonComponent} from 'core-components/wp-buttons/wp-zen-mode-toggle-button/wp-zen-mode-toggle-button.component';
import {WorkPackageFilterContainerComponent} from 'core-components/filters/filter-container/filter-container.directive';
import WorkPackageFiltersService from 'core-components/filters/wp-filters/wp-filters.service';
import {Ng1QueryFiltersComponentWrapper} from 'core-components/filters/query-filters/query-filters-ng1-wrapper.component';
import {UIRouterUpgradeModule} from '@uirouter/angular-hybrid';
import {WorkPackageSplitViewComponent} from 'core-components/routing/wp-split-view/wp-split-view.component';
import {WorkPackageBreadcrumbComponent} from 'core-components/work-packages/wp-breadcrumb/wp-breadcrumb.component';
Expand Down Expand Up @@ -188,8 +186,29 @@ import {Ng1RelationsCreateWrapper} from 'core-components/wp-relations/wp-relatio
import {WpRelationsAutocompleteComponent} from 'core-components/wp-relations/wp-relations-create/wp-relations-autocomplete/wp-relations-autocomplete.upgraded.component';
import {WpRelationAddChildComponent} from 'core-components/wp-relations/wp-relation-add-child/wp-relation-add-child';
import {WpRelationParentComponent} from 'core-components/wp-relations/wp-relations-parent/wp-relations-parent.component';
import {OpModalService} from 'core-components/op-modals/op-modal.service';
import {WpTableConfigurationModalComponent} from 'core-components/wp-table/configuration-modal/wp-table-configuration.modal';
import {WpTableConfigurationColumnsTab} from 'core-components/wp-table/configuration-modal/tabs/columns-tab.component';
import {WpTableConfigurationDisplaySettingsTab} from 'core-components/wp-table/configuration-modal/tabs/display-settings-tab.component';
import {WpTableConfigurationFiltersTab} from 'core-components/wp-table/configuration-modal/tabs/filters-tab.component';
import {WpTableConfigurationService} from 'core-components/wp-table/configuration-modal/wp-table-configuration.service';
import {WpTableConfigurationSortByTab} from 'core-components/wp-table/configuration-modal/tabs/sort-by-tab.component';
import {WpTableConfigurationTimelinesTab} from 'core-components/wp-table/configuration-modal/tabs/timelines-tab.component';
import {QueryFilterComponent} from 'core-components/filters/query-filter/query-filter.component';
import {QueryFiltersComponent} from 'core-components/filters/query-filters/query-filters.component';
import {FilterDateValueComponent} from 'core-components/filters/filter-date-value/filter-date-value.component';
import {FilterDateTimeValueComponent} from 'core-components/filters/filter-date-time-value/filter-date-time-value.component';
import {FilterDateTimesValueComponent} from 'core-components/filters/filter-date-times-value/filter-date-times-value.component';
import {FilterDatesValueComponent} from 'core-components/filters/filter-dates-value/filter-dates-value.component';
import {FilterIntegerValueComponent} from 'core-components/filters/filter-integer-value/filter-integer-value.component';
import {FilterToggledMultiselectValueComponent} from 'core-components/filters/filter-toggled-multiselect-value/filter-toggled-multiselect-value.component';
import {FilterStringValueComponent} from 'core-components/filters/filter-string-value/filter-string-value.component';
import {FilterBooleanValueComponent} from 'core-components/filters/filter-boolean-value/filter-boolean-value.component';
import {OpDatePickerComponent} from 'core-components/wp-edit/op-date-picker/op-date-picker.component';
import {AccessibleByKeyboardComponent} from 'core-components/a11y/accessible-by-keyboard.component';
import {WorkPackageFormQueryGroupComponent} from 'core-components/wp-form-group/wp-query-group.component';
import {WorkPackageFormAttributeGroupComponent} from 'core-components/wp-form-group/wp-attribute-group.component';
import {WorkPackageRelationsService} from 'core-components/wp-relations/wp-relations.service';

@NgModule({
imports: [
Expand All @@ -213,21 +232,17 @@ import {WorkPackageFormAttributeGroupComponent} from 'core-components/wp-form-gr
upgradeServiceWithToken('$timeout', $timeoutToken),
upgradeServiceWithToken('$locale', $localeToken),
upgradeServiceWithToken('NotificationsService', NotificationsServiceToken),
upgradeServiceWithToken('columnsModal', columnsModalToken),
upgradeServiceWithToken('FocusHelper', FocusHelperToken),
upgradeServiceWithToken('PathHelper', PathHelperToken),
upgradeServiceWithToken('halRequest', halRequestToken),
upgradeServiceWithToken('wpMoreMenuService', wpMoreMenuServiceToken),
upgradeServiceWithToken('TimezoneService', TimezoneServiceToken),
upgradeServiceWithToken('v3Path', v3PathToken),
upgradeServiceWithToken('wpDestroyModal', wpDestroyModalToken),
upgradeServiceWithToken('sortingModal', sortingModalToken),
upgradeServiceWithToken('groupingModal', groupingModalToken),
upgradeServiceWithToken('shareModal', shareModalToken),
upgradeServiceWithToken('saveModal', saveModalToken),
upgradeServiceWithToken('settingsModal', settingsModalToken),
upgradeServiceWithToken('exportModal', exportModalToken),
upgradeServiceWithToken('timelinesModal', timelinesModalToken),
upgradeServiceWithToken('UrlParamsHelper', UrlParamsHelperServiceToken),
upgradeService('wpRelations', WorkPackageRelationsService),
WorkPackageCacheService,
Expand Down Expand Up @@ -285,11 +300,16 @@ import {WorkPackageFormAttributeGroupComponent} from 'core-components/wp-form-gr
WorkPackageContextMenuHelperService,
QueryFormDmService,
TableState,

// OP Modals service
OpModalService,
WpTableConfigurationService,
],
declarations: [
WorkPackagesListComponent,
OpIcon,
AccessibleByKeyboardDirectiveUpgraded,
OpDatePickerComponent,
AccessibleByKeyboardComponent,
TablePaginationComponent,
WorkPackageTablePaginationComponent,
WorkPackageTimelineHeaderController,
Expand All @@ -303,14 +323,25 @@ import {WorkPackageFormAttributeGroupComponent} from 'core-components/wp-form-gr
WorkPackageDetailsViewButtonComponent,
WorkPackageTimelineButtonComponent,
WorkPackageZenModeButtonComponent,
WorkPackageFilterContainerComponent,
Ng1QueryFiltersComponentWrapper,
WpResizerDirectiveUpgraded,
WpCustomActionComponent,
WpCustomActionsComponent,
WorkPackageTableSumsRowController,
SortHeaderDirective,

// Query filters
WorkPackageFilterContainerComponent,
QueryFiltersComponent,
QueryFilterComponent,
FilterBooleanValueComponent,
FilterDateValueComponent,
FilterDatesValueComponent,
FilterDateTimeValueComponent,
FilterDateTimesValueComponent,
FilterIntegerValueComponent,
FilterStringValueComponent,
FilterToggledMultiselectValueComponent,

// Add functionality to rails rendered templates
HideSectionComponent,
HideSectionLinkComponent,
Expand Down Expand Up @@ -393,7 +424,14 @@ import {WorkPackageFormAttributeGroupComponent} from 'core-components/wp-form-gr
WorkPackageInlineCreateComponent,

// Embedded table
WorkPackageEmbeddedTableComponent
WorkPackageEmbeddedTableComponent,
// Modals
WpTableConfigurationModalComponent,
WpTableConfigurationColumnsTab,
WpTableConfigurationDisplaySettingsTab,
WpTableConfigurationFiltersTab,
WpTableConfigurationSortByTab,
WpTableConfigurationTimelinesTab,
],
entryComponents: [
WorkPackagesListComponent,
Expand Down Expand Up @@ -438,7 +476,15 @@ import {WorkPackageFormAttributeGroupComponent} from 'core-components/wp-form-gr
WorkPackageEmbeddedTableComponent,

// Relations tab (ng1 -> ng2)
WorkPackageRelationsHierarchyComponent
WorkPackageRelationsHierarchyComponent,

// Modals
WpTableConfigurationModalComponent,
WpTableConfigurationColumnsTab,
WpTableConfigurationDisplaySettingsTab,
WpTableConfigurationFiltersTab,
WpTableConfigurationSortByTab,
WpTableConfigurationTimelinesTab,
]
})
export class OpenProjectModule {
Expand Down
2 changes: 2 additions & 0 deletions frontend/app/angular4-test-setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// !!!! NEVER CHANGE THE ORDER OF THE REQUIRE IMPORTS !!!!
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

// tslint:disable:ordered-imports
require('angular');
require('zone.js');
require('zone.js/dist/long-stack-trace-zone');
Expand Down
5 changes: 1 addition & 4 deletions frontend/app/angular4-transition-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,10 @@ export const $localeToken = new InjectionToken<any>('$locale');
export const $stateToken = new InjectionToken<StateService>('$state');

export const I18nToken = new InjectionToken<op.I18n>('I18n');
export const columnsModalToken = new InjectionToken<any>('columnsModal');
export const sortingModalToken = new InjectionToken<any>('sortingModal');
export const groupingModalToken = new InjectionToken<any>('groupingModal');
export const shareModalToken = new InjectionToken<any>('shareModal');
export const saveModalToken = new InjectionToken<any>('saveModal');
export const settingsModalToken = new InjectionToken<any>('settingsModal');
export const exportModalToken = new InjectionToken<any>(' exportModal');
export const timelinesModalToken = new InjectionToken<any>('timelinesModal');

export const FocusHelperToken = new InjectionToken<any>('FocusHelper');
export const NotificationsServiceToken = new InjectionToken<any>('NotificationsService');
Expand All @@ -57,6 +53,7 @@ export const $httpToken = new InjectionToken<any>('$http');
export const halResourceFactoryToken = new InjectionToken<any>('halResourceFactory');
export const wpDestroyModalToken = new InjectionToken<any>('wpDestroyModal');
export const OpContextMenuLocalsToken = new InjectionToken<any>('CONTEXT_MENU_LOCALS');
export const OpModalLocalsToken = new InjectionToken<any>('OP_MODAL_LOCALS');
export const HookServiceToken = new InjectionToken<any>('HookService');
export const UrlParamsHelperToken = new InjectionToken<any>('UrlParamsHelper');
export const QueryResourceToken = new InjectionToken<any>('QueryResource');
Expand Down
Loading