From d5b5e015d161badbeca5a53e62f8bcf30794fa72 Mon Sep 17 00:00:00 2001 From: McMatts Date: Mon, 17 Dec 2018 13:39:13 +0000 Subject: [PATCH] Update Space view to use new layout --- domain/template/endpoint.go | 30 +-- gui/app/components/folder/document-tags.js | 4 +- .../{space-view.js => space-sidebar.js} | 25 +- gui/app/components/toolbar/for-space.js | 1 + gui/app/constants/constants.js | 5 +- gui/app/models/template.js | 72 +++++- gui/app/pods/folder/index/route.js | 4 + gui/app/pods/folder/index/template.hbs | 85 +++---- gui/app/services/template.js | 2 +- gui/app/styles/core/layout/grid.scss | 22 ++ .../styles/core/layout/master-internal.scss | 4 +- gui/app/styles/core/layout/sidebar.scss | 18 ++ gui/app/styles/core/view/space.scss | 148 ++++++----- .../components/folder/document-tags.hbs | 11 +- .../components/folder/documents-list.hbs | 53 ++-- .../components/folder/space-sidebar.hbs | 53 ++++ .../components/folder/space-view.hbs | 35 --- .../components/toolbar/for-space.hbs | 232 ++++++++---------- 18 files changed, 474 insertions(+), 330 deletions(-) rename gui/app/components/folder/{space-view.js => space-sidebar.js} (87%) create mode 100644 gui/app/templates/components/folder/space-sidebar.hbs delete mode 100644 gui/app/templates/components/folder/space-view.hbs diff --git a/domain/template/endpoint.go b/domain/template/endpoint.go index 72ef4f5a..5f360444 100644 --- a/domain/template/endpoint.go +++ b/domain/template/endpoint.go @@ -36,7 +36,7 @@ import ( "github.com/documize/community/model/doc" "github.com/documize/community/model/page" pm "github.com/documize/community/model/permission" - "github.com/documize/community/model/template" + // "github.com/documize/community/model/template" "github.com/documize/community/model/workflow" uuid "github.com/nu7hatch/gouuid" ) @@ -66,23 +66,23 @@ func (h *Handler) SavedList(w http.ResponseWriter, r *http.Request) { return } - templates := []template.Template{} + // templates := []template.Template{} - for _, d := range documents { - var t = template.Template{} - t.ID = d.RefID - t.Title = d.Name - t.Description = d.Excerpt - t.Author = "" - t.Dated = d.Created - t.Type = template.TypePrivate + // for _, d := range documents { + // var t = template.Template{} + // t.ID = d.RefID + // t.Title = d.Name + // t.Description = d.Excerpt + // t.Author = "" + // t.Dated = d.Created + // t.Type = template.TypePrivate - if d.SpaceID == spaceID { - templates = append(templates, t) - } - } + // if d.SpaceID == spaceID { + // templates = append(templates, t) + // } + // } - response.WriteJSON(w, templates) + response.WriteJSON(w, documents) } // SaveAs saves existing document as a template. diff --git a/gui/app/components/folder/document-tags.js b/gui/app/components/folder/document-tags.js index 1a68039d..f75a2ba9 100644 --- a/gui/app/components/folder/document-tags.js +++ b/gui/app/components/folder/document-tags.js @@ -12,6 +12,8 @@ import Component from '@ember/component'; export default Component.extend({ + classNames: ['hashtags'], + init() { this._super(...arguments); let tagz = []; @@ -20,7 +22,7 @@ export default Component.extend({ let tags = this.get('documentTags').split('#'); _.each(tags, function(tag) { if (tag.length > 0) { - tagz.pushObject("#" + tag); + tagz.pushObject(tag); } }); } diff --git a/gui/app/components/folder/space-view.js b/gui/app/components/folder/space-sidebar.js similarity index 87% rename from gui/app/components/folder/space-view.js rename to gui/app/components/folder/space-sidebar.js index f3625408..cc5b3547 100644 --- a/gui/app/components/folder/space-view.js +++ b/gui/app/components/folder/space-sidebar.js @@ -17,6 +17,7 @@ import AuthMixin from '../../mixins/auth'; import Component from '@ember/component'; export default Component.extend(AuthMixin, { + classNames: ["section"], router: service(), documentService: service('document'), folderService: service('folder'), @@ -26,6 +27,7 @@ export default Component.extend(AuthMixin, { spaceSettings: computed('permissions', function() { return this.get('permissions.spaceOwner') || this.get('permissions.spaceManage'); }), + selectedFilter: '', init() { this._super(...arguments); @@ -81,8 +83,6 @@ export default Component.extend(AuthMixin, { }); this.set('categoryFilter', id); - this.set('spaceSelected', false); - this.set('uncategorizedSelected', false); break; case 'uncategorized': @@ -94,19 +94,29 @@ export default Component.extend(AuthMixin, { }); this.set('categoryFilter', ''); - this.set('spaceSelected', false); - this.set('uncategorizedSelected', true); break; case 'space': - allowed = _.pluck(categoryMembers, 'documentId'); docs.forEach((d) => { filtered.pushObject(d); }); this.set('categoryFilter', ''); - this.set('spaceSelected', true); - this.set('uncategorizedSelected', false); + break; + + case 'template': + filtered.pushObjects(this.get('templates')); + this.set('categoryFilter', ''); + break; + + case 'draft': + filtered = this.get('documentsDraft'); + this.set('categoryFilter', ''); + break; + + case 'live': + filtered = this.get('documentsLive'); + this.set('categoryFilter', ''); break; } @@ -114,6 +124,7 @@ export default Component.extend(AuthMixin, { cat.set('selected', cat.get('id') === id); }); + this.set('selectedFilter', filter); this.set('categories', categories); this.get('onFiltered')(filtered); } diff --git a/gui/app/components/toolbar/for-space.js b/gui/app/components/toolbar/for-space.js index 9659e7b1..bfc16b24 100644 --- a/gui/app/components/toolbar/for-space.js +++ b/gui/app/components/toolbar/for-space.js @@ -19,6 +19,7 @@ import Notifier from '../../mixins/notifier'; import Component from '@ember/component'; export default Component.extend(ModalMixin, AuthMixin, Notifier, { + classNames: ["display-inline-block"], spaceService: service('folder'), localStorage: service(), templateService: service('template'), diff --git a/gui/app/constants/constants.js b/gui/app/constants/constants.js index 2f6a86e1..646df70f 100644 --- a/gui/app/constants/constants.js +++ b/gui/app/constants/constants.js @@ -209,7 +209,10 @@ let constants = EmberObject.extend({ Attachment: 'dicon-attachment', BarChart: 'dicon-chart-bar-2', Bookmark: 'dicon-bookmark', - ButtonAction: 'button-2', + BookmarkAdd: 'dicon-bookmark-add', + BookmarkDelete: 'dicon-bookmark-delete', + ButtonAction: 'dicon-button-2', + Category: 'dicon-flag', Checkbox: 'dicon-shape-rectangle', CheckboxChecked: 'dicon-i-check', Database: 'dicon-database', diff --git a/gui/app/models/template.js b/gui/app/models/template.js index b6ee1f05..5e170e6c 100644 --- a/gui/app/models/template.js +++ b/gui/app/models/template.js @@ -10,21 +10,73 @@ // https://documize.com import { computed } from '@ember/object'; -import Model from 'ember-data/model'; import attr from 'ember-data/attr'; import stringUtil from '../utils/string'; -// import { belongsTo, hasMany } from 'ember-data/relationships'; +import Model from 'ember-data/model'; + export default Model.extend({ - author: attr('string'), - dated: attr(), - description: attr('string'), - title: attr('string'), - type: attr('number', { defaultValue: 0 }), + name: attr('string'), + excerpt: attr('string'), + job: attr('string'), + location: attr('string'), + orgId: attr('string'), + spaceId: attr('string'), + userId: attr('string'), + tags: attr('string'), + template: attr('boolean'), + protection: attr('number', { defaultValue: 0 }), + approval: attr('number', { defaultValue: 0 }), + lifecycle: attr('number', { defaultValue: 1 }), + versioned: attr('boolean'), + versionId: attr('string'), + versionOrder: attr('number', { defaultValue: 0 }), + groupId: attr('string'), - slug: computed('title', function () { - return stringUtil.makeSlug(this.get('title')); + // client-side property + selected: attr('boolean', { defaultValue: false }), + slug: computed('name', function () { + return stringUtil.makeSlug(this.get('name')); }), created: attr(), - revised: attr() + revised: attr(), + + isDraft: computed('lifecycle', function () { + let constants = this.get('constants'); + return this.get('lifecycle') == constants.Lifecycle.Draft; + }), + + isLive: computed('lifecycle', function () { + let constants = this.get('constants'); + return this.get('lifecycle') == constants.Lifecycle.Live; + }), + + lifecycleLabel: computed('lifecycle', function () { + let constants = this.get('constants'); + switch (this.get('lifecycle')) { + case constants.Lifecycle.Draft: + return constants.Lifecycle.DraftLabel; + case constants.Lifecycle.Live: + return constants.Lifecycle.LiveLabel; + case constants.Lifecycle.Archived: + return constants.Lifecycle.ArchivedLabel; + } + + return ''; + }), }); + + +// export default Model.extend({ +// author: attr('string'), +// dated: attr(), +// description: attr('string'), +// title: attr('string'), +// type: attr('number', { defaultValue: 0 }), + +// slug: computed('title', function () { +// return stringUtil.makeSlug(this.get('title')); +// }), +// created: attr(), +// revised: attr() +// }); diff --git a/gui/app/pods/folder/index/route.js b/gui/app/pods/folder/index/route.js index 01ba0c38..a1d19c1b 100644 --- a/gui/app/pods/folder/index/route.js +++ b/gui/app/pods/folder/index/route.js @@ -32,6 +32,8 @@ export default Route.extend(AuthenticatedRouteMixin, { model() { this.get('browser').setTitle(this.modelFor('folder').folder.get('name')); + let constants = this.get('constants'); + let folders = this.modelFor('folder').folders; folders.forEach(f => { f.set('selected', false); @@ -47,6 +49,8 @@ export default Route.extend(AuthenticatedRouteMixin, { permissions: this.modelFor('folder').permissions, folders: folders, documents: documents, + documentsDraft: _.filter(documents, function(d) { return d.get('lifecycle') === constants.Lifecycle.Draft; }), + documentsLive: _.filter(documents, function(d) { return d.get('lifecycle') === constants.Lifecycle.Live; }), templates: this.modelFor('folder').templates, showStartDocument: false, rootDocCount: 0, diff --git a/gui/app/pods/folder/index/template.hbs b/gui/app/pods/folder/index/template.hbs index 1951eb52..f08f72d2 100644 --- a/gui/app/pods/folder/index/template.hbs +++ b/gui/app/pods/folder/index/template.hbs @@ -1,54 +1,49 @@ -{{#layout/top-bar}} -
  • - {{#link-to "folder.index" model.folder.id model.folder.slug class="link selected"}} - {{model.folder.name}} - {{/link-to}} -
  • -{{/layout/top-bar}} +{{#layout/master-sidebar selectedItem="spaces"}} + {{folder/space-sidebar + spaces=model.folders + space=model.folder + templates=model.templates + permissions=model.permissions + documents=model.documents + documentsDraft=model.documentsDraft + documentsLive=model.documentsLive + categories=model.categories + categorySummary=model.categorySummary + categoryMembers=model.categoryMembers + rootDocCount=model.rootDocCount + categoryFilter=category + onFiltered=(action "onFiltered") + onRefresh=(action "onRefresh")}} +{{/layout/master-sidebar}} -{{#layout/middle-zone}} - {{#layout/middle-zone-content}} - {{toolbar/for-space - spaces=model.folders - space=model.folder - permissions=model.permissions - templates=model.templates - category=category - categories=model.categories - documents=filteredDocs - onRefresh=(action "onRefresh")}} - - {{folder/documents-list - documents=filteredDocs - spaces=model.folders - space=model.folder - templates=model.templates - permissions=model.permissions - onExportDocument=(action "onExportDocument") - onDeleteDocument=(action "onDeleteDocument") - onMoveDocument=(action "onMoveDocument")}} - {{/layout/middle-zone-content}} - - {{#layout/middle-zone-sidebar scrollable=true}} -