workarea-admin 3.4.18 → 3.4.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/workarea/admin/catalog_categories_controller.rb +12 -1
- data/app/view_models/workarea/admin/timeline_view_model.rb +29 -2
- data/app/views/workarea/admin/product_rules/fields/_category.html.haml +1 -1
- data/app/views/workarea/admin/timeline/show.html.haml +33 -0
- data/config/locales/en.yml +2 -0
- data/test/integration/workarea/admin/categories_integration_test.rb +15 -0
- data/test/view_models/workarea/admin/timeline_view_model_test.rb +11 -2
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c08425b237953579d29e22a8fbc38b70bedbf3347d293ec3912ed9b6c388800
|
4
|
+
data.tar.gz: 86b06b877c1b0816c15be5df0ea499a6d7abcb3dbce2d0c89f5761c8c147aa5a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc92a2c5fe37b7620d3f6438349038e5749e838175d18031efc4c0a1e023b77b611f00682a7f2219432d0cd00ca5324b65fe435ec36b14679e66d738f709aa5b
|
7
|
+
data.tar.gz: 1e7f31d4a2a7f60a9f1c74e746ac67c7eb1b6ce268aa52d99a378ec841ebc732e8679eda22b194af6c46332df10dc4844f09ea6b6ebc3abeade722aa8961b19e
|
@@ -9,7 +9,10 @@ module Workarea
|
|
9
9
|
|
10
10
|
def index
|
11
11
|
search = Search::AdminCategories.new(
|
12
|
-
params.merge(
|
12
|
+
params.merge(
|
13
|
+
autocomplete: request.xhr?,
|
14
|
+
exclude_ids: exclude_ids
|
15
|
+
)
|
13
16
|
)
|
14
17
|
|
15
18
|
@search = SearchViewModel.new(search, view_model_options)
|
@@ -44,6 +47,14 @@ module Workarea
|
|
44
47
|
|
45
48
|
private
|
46
49
|
|
50
|
+
def exclude_ids
|
51
|
+
if params[:exclude_ids].blank?
|
52
|
+
[]
|
53
|
+
else
|
54
|
+
Catalog::Category.in(id: params[:exclude_ids]).map { |c| Search::Admin.for(c).id }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
47
58
|
def find_category
|
48
59
|
if params[:id].present?
|
49
60
|
@category = Catalog::Category.find_by(slug: params[:id])
|
@@ -3,7 +3,15 @@ module Workarea
|
|
3
3
|
class TimelineViewModel < ApplicationViewModel
|
4
4
|
def upcoming_changesets
|
5
5
|
@upcoming_changesets ||= ChangesetViewModel.wrap(
|
6
|
-
model_changesets + content_changesets
|
6
|
+
(model_changesets + content_changesets)
|
7
|
+
.sort { |c| c.release.publish_at }
|
8
|
+
.reverse
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
def unscheduled_changesets
|
13
|
+
@unscheduled_changesets ||= ChangesetViewModel.wrap(
|
14
|
+
unscheduled_model_changesets + unscheduled_content_changesets
|
7
15
|
)
|
8
16
|
end
|
9
17
|
|
@@ -40,6 +48,12 @@ module Workarea
|
|
40
48
|
.any_in(release_id: upcoming_releases.map(&:id))
|
41
49
|
end
|
42
50
|
|
51
|
+
def unscheduled_model_changesets
|
52
|
+
Release::Changeset
|
53
|
+
.by_document_path(model)
|
54
|
+
.any_in(release_id: unscheduled_releases.map(&:id))
|
55
|
+
end
|
56
|
+
|
43
57
|
def content_changesets
|
44
58
|
return [] unless model.is_a?(Contentable)
|
45
59
|
|
@@ -49,8 +63,21 @@ module Workarea
|
|
49
63
|
.to_a
|
50
64
|
end
|
51
65
|
|
66
|
+
def unscheduled_content_changesets
|
67
|
+
return [] unless model.is_a?(Contentable)
|
68
|
+
|
69
|
+
Workarea::Content.for(model)
|
70
|
+
.changesets
|
71
|
+
.any_in(release_id: unscheduled_releases.map(&:id))
|
72
|
+
.to_a
|
73
|
+
end
|
74
|
+
|
52
75
|
def upcoming_releases
|
53
|
-
@upcoming_releases ||= Release.upcoming.to_a
|
76
|
+
@upcoming_releases ||= (Release.upcoming - unscheduled_releases).to_a
|
77
|
+
end
|
78
|
+
|
79
|
+
def unscheduled_releases
|
80
|
+
@unscheduled_releases ||= Release.unscheduled.to_a
|
54
81
|
end
|
55
82
|
end
|
56
83
|
end
|
@@ -2,4 +2,4 @@
|
|
2
2
|
Name
|
3
3
|
= select_tag 'product_rule[operator]', options_for_select([['equal', 'equal'], ['not equal', 'not_equal']], rule.operator)
|
4
4
|
- categories = Workarea::Catalog::Category.any_in(id: rule.terms)
|
5
|
-
= select_tag 'product_rule[value]', options_from_collection_for_select(categories, 'id', 'name', rule.terms), multiple: true, data: { remote_select: { source: catalog_categories_path, options: { placeholder: '
|
5
|
+
= select_tag 'product_rule[value]', options_from_collection_for_select(categories, 'id', 'name', rule.terms), multiple: true, data: { remote_select: { source: catalog_categories_path(exclude_ids: rule.product_list.id), options: { placeholder: t('workarea.admin.product_rules.fields.category.choose') } }.to_json }
|
@@ -19,6 +19,39 @@
|
|
19
19
|
.grid.grid--center
|
20
20
|
.grid__cell.grid__cell--80-at-medium
|
21
21
|
.grid
|
22
|
+
- @timeline.unscheduled_changesets.each_with_index do |changeset, index|
|
23
|
+
.activity-group.activity-group--bordered
|
24
|
+
.grid__cell.grid__cell--20
|
25
|
+
- if index == 0
|
26
|
+
.date-marker
|
27
|
+
.date-marker__annotation= t('workarea.admin.timeline.unscheduled_changes')
|
28
|
+
.date-marker__day ?
|
29
|
+
.grid__cell.grid__cell--80
|
30
|
+
.activity
|
31
|
+
.activity__header
|
32
|
+
= inline_svg('workarea/admin/icons/release_timeline.svg', class: 'activity__avatar')
|
33
|
+
%h3.activity__name= link_to changeset.release.name, release_path(changeset.release)
|
34
|
+
%p.activity__time
|
35
|
+
= changeset.publish_humanized
|
36
|
+
.activity__actions
|
37
|
+
.grid.grid--auto
|
38
|
+
.grid__cell
|
39
|
+
= form_tag release_session_path, method: :post do
|
40
|
+
= hidden_field_tag :release_id, changeset.release.id
|
41
|
+
= hidden_field_tag :return_to, url_for(@timeline.subject)
|
42
|
+
= button_tag value: 'edit_changes', class: 'text-button' do
|
43
|
+
%span= t('workarea.admin.timeline.edit')
|
44
|
+
= inline_svg('workarea/admin/icons/edit.svg', class: 'text-button__icon')
|
45
|
+
.grid__cell
|
46
|
+
= form_tag release_changeset_path(changeset.release, changeset), method: :delete, class: 'action-group__item', data: { deletion_form: { message: t('workarea.admin.timeline.delete_confirmation') } } do
|
47
|
+
= button_tag value: 'delete_changeset', class: 'text-button' do
|
48
|
+
%span= t('workarea.admin.actions.delete')
|
49
|
+
= inline_svg('workarea/admin/icons/delete.svg', class: 'text-button__icon')
|
50
|
+
.activity__message
|
51
|
+
.release-changeset.release-changeset--activity
|
52
|
+
- changeset.changed_fields.each do |field|
|
53
|
+
= render_changeset_field(changeset, field)
|
54
|
+
|
22
55
|
- @timeline.upcoming_changesets.each_with_index do |changeset, index|
|
23
56
|
.activity-group.activity-group--bordered
|
24
57
|
.grid__cell.grid__cell--20
|
data/config/locales/en.yml
CHANGED
@@ -2801,6 +2801,7 @@ en:
|
|
2801
2801
|
category:
|
2802
2802
|
name: Category that does
|
2803
2803
|
placeholder: Category A, Category B
|
2804
|
+
choose: Choose a category...
|
2804
2805
|
publish_authorization:
|
2805
2806
|
unauthorized: You are not authorized to publish changes now. You may add these changes to a release.
|
2806
2807
|
recommendations:
|
@@ -3442,6 +3443,7 @@ en:
|
|
3442
3443
|
no_activity: No activity to show
|
3443
3444
|
timeline_for: Timeline For
|
3444
3445
|
today: Today
|
3446
|
+
unscheduled_changes: Unscheduled Changes
|
3445
3447
|
upcoming_changes: Upcoming Changes
|
3446
3448
|
toolbar:
|
3447
3449
|
adjust_order_pricing: Adjust Order Pricing
|
@@ -44,6 +44,21 @@ module Workarea
|
|
44
44
|
refute(results['results'].first['top'])
|
45
45
|
end
|
46
46
|
|
47
|
+
def test_exclude_categories_from_search_results
|
48
|
+
category = create_category(name: 'Category')
|
49
|
+
ignored = create_category(name: 'Category')
|
50
|
+
|
51
|
+
get admin.catalog_categories_path(exclude_ids: ignored.id, q: category.name, format: :json)
|
52
|
+
|
53
|
+
results = JSON.parse(response.body).with_indifferent_access[:results]
|
54
|
+
values = results.map { |result| result[:value] }
|
55
|
+
|
56
|
+
assert_response(:success)
|
57
|
+
refute_empty(values)
|
58
|
+
assert_includes(values, category.id.to_s)
|
59
|
+
refute_includes(values, ignored.id.to_s)
|
60
|
+
end
|
61
|
+
|
47
62
|
def test_returns_breadcrumb_as_title_with_json_response
|
48
63
|
category = create_category(name: 'Test')
|
49
64
|
create_taxon(
|
@@ -15,22 +15,31 @@ module Workarea
|
|
15
15
|
assert_equal(view_model.upcoming_changesets.length, 1)
|
16
16
|
assert_equal(view_model.upcoming_changesets.first.release_id, release.id)
|
17
17
|
|
18
|
-
release = create_release(name: 'Bar')
|
18
|
+
release = create_release(name: 'Bar', publish_at: 4.days.from_now)
|
19
19
|
release.as_current { @releasable.update_attributes!(name: 'Changed') }
|
20
20
|
|
21
21
|
view_model = TimelineViewModel.new(@releasable)
|
22
22
|
assert_equal(view_model.upcoming_changesets.length, 2)
|
23
23
|
assert_equal(view_model.upcoming_changesets.second.release_id, release.id)
|
24
24
|
|
25
|
+
release = create_release(name: 'Baz')
|
26
|
+
release.as_current { @releasable.update_attributes!(name: 'Changed') }
|
27
|
+
|
28
|
+
view_model = TimelineViewModel.new(@releasable)
|
29
|
+
assert_equal(view_model.upcoming_changesets.length, 2)
|
30
|
+
|
25
31
|
release = create_release(name: 'Foo', published_at: 3.days.ago)
|
26
32
|
release.as_current { @releasable.update_attributes!(name: 'Changed') }
|
27
33
|
|
28
34
|
view_model = TimelineViewModel.new(@releasable)
|
29
35
|
assert_equal(view_model.upcoming_changesets.length, 2)
|
36
|
+
|
37
|
+
assert_equal('Foo', view_model.upcoming_changesets.first.release.name)
|
38
|
+
assert_equal('Bar', view_model.upcoming_changesets.last.release.name)
|
30
39
|
end
|
31
40
|
|
32
41
|
def test_upcoming_changesets_with_content
|
33
|
-
release = create_release
|
42
|
+
release = create_release(publish_at: 1.day.from_now)
|
34
43
|
content = Content.for(@releasable)
|
35
44
|
release.as_current { content.update_attributes!(browser_title: 'Foo') }
|
36
45
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: workarea-admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.4.
|
4
|
+
version: 3.4.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Crouse
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-10-
|
11
|
+
date: 2019-10-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: workarea-core
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 3.4.
|
19
|
+
version: 3.4.19
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 3.4.
|
26
|
+
version: 3.4.19
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: workarea-storefront
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 3.4.
|
33
|
+
version: 3.4.19
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 3.4.
|
40
|
+
version: 3.4.19
|
41
41
|
description: Provides site administration functionality for the Workarea Commerce
|
42
42
|
Platform.
|
43
43
|
email:
|