Skip to content

[pull] dev from opf:dev #531

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

Merged
merged 39 commits into from
Apr 4, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
3533a5a
First draft of docs for BorderBox
psatyal Apr 1, 2025
01c9afc
Filename update
psatyal Apr 1, 2025
8a522f5
Split tables documentation into TableComponent and BorderBoxComponent
HDinger Apr 2, 2025
0ffc60c
Undo rubocop changes which messed up the preview
HDinger Apr 2, 2025
4c6e0ea
Clean-up comments
HDinger Apr 2, 2025
ffdb969
Be more strict when re-applying the body classes after a turbo:load e…
HDinger Apr 3, 2025
1f68d17
Update to the docs
psatyal Apr 3, 2025
7a0a04d
Update to uses
psatyal Apr 3, 2025
066c515
Increase the height of the dropdown so that some elements are cut and…
HDinger Apr 3, 2025
3eda83f
Add a code example for the collapsibleHeader and do some cleanup
HDinger Apr 3, 2025
83d37b1
Minor update
psatyal Apr 3, 2025
d44c0f8
Minor
psatyal Apr 3, 2025
2974b02
Add with_footer example for BorderBoxTable
mrmir Apr 3, 2025
951ae05
Clean up
mrmir Apr 3, 2025
c34077d
Bump eslint-plugin-react from 7.37.4 to 7.37.5 in /frontend
dependabot[bot] Apr 4, 2025
1d9fcdc
Bump rubocop from 1.75.1 to 1.75.2
dependabot[bot] Apr 4, 2025
602c44f
Bump vernier from 1.6.0 to 1.7.0
dependabot[bot] Apr 4, 2025
31a9892
Bump brakeman from 7.0.0 to 7.0.1
dependabot[bot] Apr 4, 2025
bb7f75c
Fix some links
HDinger Apr 4, 2025
8701958
Merge pull request #18508 from opf/feature/62577-borderBoxCollapsible…
HDinger Apr 4, 2025
8d050a6
Merge pull request #18529 from opf/bug/61790-not-enough-spacing-on-fi…
HDinger Apr 4, 2025
07ba757
Merge pull request #18532 from opf/bug/62743-the-add-relations-drop-d…
mrmir Apr 4, 2025
f589099
Replace deprecated Primer::ButtonComponent with Primer::Beta::Button
HDinger Apr 4, 2025
336760a
Merge pull request #18539 from opf/dependabot/bundler/dev/rubocop-1.75.2
klaustopher Apr 4, 2025
a344fb1
Bump primer 0.59.2
HDinger Apr 4, 2025
611557b
Merge pull request #18540 from opf/dependabot/bundler/dev/vernier-1.7.0
ulferts Apr 4, 2025
74a4be8
Bump dry-monads
NobodysNightmare Apr 4, 2025
c9761f4
Merge pull request #18546 from opf/bump-dry-monads
NobodysNightmare Apr 4, 2025
6e809e1
update life cycle string
ulferts Apr 4, 2025
af6fc55
improve performance of WorkPackageCustomField.visible_by_user
ulferts Apr 4, 2025
39f102a
update locales from crowdin [ci skip]
openprojectci Apr 4, 2025
829d716
Merge pull request #18541 from opf/dependabot/bundler/dev/brakeman-7.0.1
klaustopher Apr 4, 2025
51fb88a
update locales from crowdin [ci skip]
openprojectci Apr 4, 2025
807b3e4
Merge pull request #18545 from opf/fix/wp_cf_visible_by_user_performance
ulferts Apr 4, 2025
182bed8
Merge remote-tracking branch 'origin/release/15.5' into dev
ulferts Apr 4, 2025
650cea0
Merge branch 'dev' into dependabot/npm_and_yarn/frontend/dev/eslint-p…
klaustopher Apr 4, 2025
27a0824
Merge pull request #18544 from opf/housekeeping/bump-primer-0-59-2
HDinger Apr 4, 2025
215d0b4
Merge remote-tracking branch 'origin/release/15.5' into dev
HDinger Apr 4, 2025
0aa8917
Merge pull request #18538 from opf/dependabot/npm_and_yarn/frontend/d…
klaustopher Apr 4, 2025
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
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -412,4 +412,4 @@ end

gem "openproject-octicons", "~>19.23.0"
gem "openproject-octicons_helper", "~>19.23.0"
gem "openproject-primer_view_components", "~>0.59.1"
gem "openproject-primer_view_components", "~>0.59.2"
28 changes: 14 additions & 14 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,7 @@ GEM
bindata (2.5.0)
bootsnap (1.18.4)
msgpack (~> 1.2)
brakeman (7.0.0)
brakeman (7.0.1)
racc
browser (6.2.0)
builder (3.3.0)
Expand Down Expand Up @@ -504,7 +504,7 @@ GEM
concurrent-ruby (~> 1.0)
dry-core (~> 1.1)
zeitwerk (~> 2.6)
dry-monads (1.8.2)
dry-monads (1.8.3)
concurrent-ruby (~> 1.0)
dry-core (~> 1.1)
zeitwerk (~> 2.6)
Expand Down Expand Up @@ -858,7 +858,7 @@ GEM
actionview
openproject-octicons (= 19.23.0)
railties
openproject-primer_view_components (0.59.1)
openproject-primer_view_components (0.59.2)
actionview (>= 5.0.0)
activesupport (>= 5.0.0)
openproject-octicons (>= 19.23.0)
Expand Down Expand Up @@ -1063,18 +1063,18 @@ GEM
rspec-support (3.13.2)
rspec-wait (1.0.1)
rspec (>= 3.4)
rubocop (1.75.1)
rubocop (1.75.2)
json (~> 2.3)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0)
parallel (~> 1.10)
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 2.9.3, < 3.0)
rubocop-ast (>= 1.43.0, < 2.0)
rubocop-ast (>= 1.44.0, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0)
rubocop-ast (1.43.0)
rubocop-ast (1.44.0)
parser (>= 3.3.7.2)
prism (~> 1.4)
rubocop-capybara (2.22.1)
Expand Down Expand Up @@ -1215,7 +1215,7 @@ GEM
public_suffix
vcr (6.3.1)
base64
vernier (1.6.0)
vernier (1.7.0)
view_component (3.22.0)
activesupport (>= 5.2.0, < 8.1)
concurrent-ruby (= 1.3.4)
Expand Down Expand Up @@ -1391,7 +1391,7 @@ DEPENDENCIES
openproject-octicons (~> 19.23.0)
openproject-octicons_helper (~> 19.23.0)
openproject-openid_connect!
openproject-primer_view_components (~> 0.59.1)
openproject-primer_view_components (~> 0.59.2)
openproject-recaptcha!
openproject-reporting!
openproject-storages!
Expand Down Expand Up @@ -1535,7 +1535,7 @@ CHECKSUMS
bigdecimal (3.1.9) sha256=2ffc742031521ad69c2dfc815a98e426a230a3d22aeac1995826a75dabfad8cc
bindata (2.5.0) sha256=29dccb8ba1cc9de148f24bb88930840c62db56715f0f80eccadd624d9f3d2623
bootsnap (1.18.4) sha256=ac4c42af397f7ee15521820198daeff545e4c360d2772c601fbdc2c07d92af55
brakeman (7.0.0) sha256=1a0122b0c70f17519a61548a53a332c0acc19e3aa10b445e15e025a4b13b8577
brakeman (7.0.1) sha256=ec751d439820ed9d04d4ed00ff4fb21ac91689fcbb6cc564b786a4061c8f720d
browser (6.2.0) sha256=281d5295788825c9396427c292c2d2be0a5c91875c93c390fde6e5d61a5ace2d
budgets (1.0.0)
builder (3.3.0) sha256=497918d2f9dca528fdca4b88d84e4ef4387256d984b8154e9d5d3fe5a9c8835f
Expand Down Expand Up @@ -1593,7 +1593,7 @@ CHECKSUMS
dry-inflector (1.2.0) sha256=22f5d0b50fd57074ae57e2ca17e3b300e57564c218269dcf82ff3e42d3f38f2e
dry-initializer (3.2.0) sha256=37d59798f912dc0a1efe14a4db4a9306989007b302dcd5f25d0a2a20c166c4e3
dry-logic (1.6.0) sha256=da6fedbc0f90fc41f9b0cc7e6f05f5d529d1efaef6c8dcc8e0733f685745cea2
dry-monads (1.8.2) sha256=662e0b4515bc41048e0e2c033db86327839649a53bff383489096e47a71f22b0
dry-monads (1.8.3) sha256=5fbc06ae4ff76ae081922a902be998673703304d10b46b08931696f2c8decc06
dry-schema (1.14.1) sha256=2fcd7539a7099cacae6a22f6a3a2c1846fe5afeb1c841cde432c89c6cb9b9ff1
dry-types (1.8.2) sha256=c84e9ada69419c727c3b12e191e0ed7d2c6d58d040d55e79ea16e0ebf8b3ec0f
dry-validation (1.11.1) sha256=70900bb5a2d911c8aab566d3e360c6bff389b8bf92ea8e04885ce51c41ff8085
Expand Down Expand Up @@ -1757,7 +1757,7 @@ CHECKSUMS
openproject-octicons (19.23.0) sha256=bf69988c440b4aef249b2cb30e7c4139370e3b5d0c6e77ef2323eb0f48a37c13
openproject-octicons_helper (19.23.0) sha256=d501eb62e323e326ce56eb9e4ea0d499dfca8ec5c382843c78025a529a0a8156
openproject-openid_connect (1.0.0)
openproject-primer_view_components (0.59.1) sha256=bd747e187093269e54fc8e26df9a1465765d138dd468e7c6c5e1774f597b08e3
openproject-primer_view_components (0.59.2) sha256=7830dc1c678a08d6474e7b492a7836946b7379798b6dd22e09d69e7a34ed7f0f
openproject-recaptcha (1.0.0)
openproject-reporting (1.0.0)
openproject-storages (1.0.0)
Expand Down Expand Up @@ -1847,8 +1847,8 @@ CHECKSUMS
rspec-retry (0.6.2) sha256=6101ba23a38809811ae3484acde4ab481c54d846ac66d5037ccb40131a60d858
rspec-support (3.13.2) sha256=cea3a2463fd9b84b9dcc9685efd80ea701aa8f7b3decb3b3ce795ed67737dbec
rspec-wait (1.0.1) sha256=50ce9cc7cd20b8bb67b95a4ed56b59a16d4af7e86ae91b28dbf20eeaa2481d1f
rubocop (1.75.1) sha256=c12900c55b0b52e6ed1384f7f7575beb92047019ce37ca14b9572d80239adc29
rubocop-ast (1.43.0) sha256=92cd649e336ce10212cb2f2b29028f487777ecc477f108f437a1dce1ee3db79a
rubocop (1.75.2) sha256=8efde647e278417e8074421b007e0d7d7c591482ef99d980528b18fea015a7c8
rubocop-ast (1.44.0) sha256=77fdaf4aacf0c7d1ef887b075686124fb4ae5743d42ff7e73bb1c0d6b61b5d0a
rubocop-capybara (2.22.1) sha256=ced88caef23efea53f46e098ff352f8fc1068c649606ca75cb74650970f51c0c
rubocop-factory_bot (2.27.1) sha256=9d744b5916778c1848e5fe6777cc69855bd96548853554ec239ba9961b8573fe
rubocop-openproject (0.2.0) sha256=2300ed6b638a34a9368b458dc5fb618ae396da6a27670b50519ad1e3cea65ccb
Expand Down Expand Up @@ -1917,7 +1917,7 @@ CHECKSUMS
validate_email (0.1.6) sha256=9dfe9016d527b17a8d3a6e95e4dc50a125400eef899d13d4cc2a254393f82ee4
validate_url (1.0.15) sha256=72fe164c0713d63a9970bd6700bea948babbfbdcec392f2342b6704042f57451
vcr (6.3.1) sha256=37b56e157e720446a3f4d2d39919cabef8cb7b6c45936acffd2ef8229fec03ed
vernier (1.6.0) sha256=dc9b489f720e25881dc5cd1e12ac237a980dc78919477aa8f1e02d8725987346
vernier (1.7.0) sha256=b64c3e0cf1ddf1842e0afca8b09b1664d391b22f0ebfcc924cc2fbb2536231d9
view_component (3.22.0) sha256=70e350abeb77a8710d94b335e68f79bc51da5d1640bc486c5b9bb8b589f0f2c5
virtus (2.0.0) sha256=8841dae4eb7fcc097320ba5ea516bf1839e5d056c61ee27138aa4bddd6e3d1c2
warden (1.2.9) sha256=46684f885d35a69dbb883deabf85a222c8e427a957804719e143005df7a1efd0
Expand Down
2 changes: 1 addition & 1 deletion app/components/add_button_component.html.erb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<%= render(
Primer::ButtonComponent.new(
Primer::Beta::Button.new(
scheme: :primary,
aria: { label: aria_label },
title:,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ See COPYRIGHT and LICENSE files for more details.

concat(
render(Primer::Alpha::Dialog::Footer.new(show_divider: false)) do
concat(render(Primer::ButtonComponent.new(data: { "close-dialog-id": dialog_id })) { cancel_button_text })
concat(render(Primer::ButtonComponent.new(scheme: :primary, type: :submit)) { submit_button_text })
concat(render(Primer::Beta::Button.new(data: { "close-dialog-id": dialog_id })) { cancel_button_text })
concat(render(Primer::Beta::Button.new(scheme: :primary, type: :submit)) { submit_button_text })
end
)
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,11 @@ See COPYRIGHT and LICENSE files for more details.

collection.with_component(Primer::Alpha::Dialog::Footer.new) do
component_collection do |footer|
footer.with_component(Primer::ButtonComponent.new(data: { "close-dialog-id": "new-access-token-dialog" })) do
footer.with_component(Primer::Beta::Button.new(data: { "close-dialog-id": "new-access-token-dialog" })) do
I18n.t("button_cancel")
end

footer.with_component(Primer::ButtonComponent.new(scheme: :primary, type: :submit, test_selector: "create-api-token-button")) do
footer.with_component(Primer::Beta::Button.new(scheme: :primary, type: :submit, test_selector: "create-api-token-button")) do
I18n.t("my.access_token.new_access_token_dialog_submit_button_text")
end
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@
<% end %>
<% end %>
<%= render(Primer::Alpha::Dialog::Footer.new) do %>
<%= render(Primer::ButtonComponent.new(data: { "close-dialog-id": MODAL_ID })) { I18n.t(:button_cancel) } %>
<%= render(Primer::Beta::Button.new(data: { "close-dialog-id": MODAL_ID })) { I18n.t(:button_cancel) } %>
<%= render(
Primer::ButtonComponent.new(
Primer::Beta::Button.new(
scheme: :primary,
type: :submit,
data: { "test-selector": "#{MODAL_ID}-submit" },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@

collection.with_component(Primer::Alpha::Dialog::Footer.new) do
component_collection do |modal_footer|
modal_footer.with_component(Primer::ButtonComponent.new(data: { "close-dialog-id": "project-custom-field-section-dialog#{@project_custom_field_section.id}" })) do
modal_footer.with_component(Primer::Beta::Button.new(data: { "close-dialog-id": "project-custom-field-section-dialog#{@project_custom_field_section.id}" })) do
t("button_cancel")
end

modal_footer.with_component(Primer::ButtonComponent.new(scheme: :primary, type: :submit)) do
modal_footer.with_component(Primer::Beta::Button.new(scheme: :primary, type: :submit)) do
t("button_save")
end
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
d.with_footer do
component_collection do |buttons|
buttons.with_component(
Primer::ButtonComponent.new(
Primer::Beta::Button.new(
data: {
"close-dialog-id": DIALOG_ID
}
Expand All @@ -26,7 +26,7 @@
t("button_cancel")
end
buttons.with_component(
Primer::ButtonComponent.new(
Primer::Beta::Button.new(
scheme: :primary,
form: FORM_ID,
data: { turbo: true },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
// It can't be nested inside the BEM model as it's placed as a #top-layer element.
#new-relation-action-menu-list,
#new-child-action-menu-list
max-height: 450px
max-height: 470px
max-width: 280px
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@
d.with_footer do
component_collection do |buttons|
buttons.with_component(
Primer::ButtonComponent.new(
Primer::Beta::Button.new(
data: { "close-dialog-id": DIALOG_ID }
)
) do
t(:button_cancel)
end
buttons.with_component(
Primer::ButtonComponent.new(
Primer::Beta::Button.new(
scheme: :primary,
form: FORM_ID,
data: { turbo: true },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
flex_layout do |start_date|
start_date.with_row(classes: container_classes(:start_date)) do
render(
Primer::ButtonComponent.new(
Primer::Beta::Button.new(
tag: :a,
href: single_date_field_button_link("start_date"),
data: { turbo_frame: "wp-datepicker-dialog--content", morph: true },
Expand All @@ -31,7 +31,7 @@
flex_layout do |due_date|
due_date.with_row(classes: container_classes(:due_date), data: { skip_morphing: true }) do
render(
Primer::ButtonComponent.new(
Primer::Beta::Button.new(
tag: :a,
href: single_date_field_button_link("due_date"),
data: { turbo_frame: "wp-datepicker-dialog--content", morph: true },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@
collection.with_component(Primer::Alpha::Dialog::Footer.new) do
component_collection do |footer|
footer.with_component(
Primer::ButtonComponent.new(
Primer::Beta::Button.new(
data: { action: "work-packages--date-picker--preview#cancel" },
test_selector: "op-datepicker-modal--action"
)
Expand All @@ -85,7 +85,7 @@
end

footer.with_component(
Primer::ButtonComponent.new(
Primer::Beta::Button.new(
scheme: :primary,
type: :submit,
form: DIALOG_FORM_ID,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
<%=
render(Primer::Alpha::Dialog.new(
id: "create-work-package-dialog",
title: I18n.t(:label_work_package_new),
size: :xlarge,
data: {
'keep-open-on-submit': true,
}
)) do |dialog|
render(
Primer::Alpha::Dialog.new(
id: "create-work-package-dialog",
title: I18n.t(:label_work_package_new),
size: :xlarge,
data: {
"keep-open-on-submit": true
}
)
) do |dialog|
dialog.with_header(variant: :large)
dialog.with_body do
render(WorkPackages::Dialogs::CreateFormComponent.new(work_package:, project:))
Expand All @@ -15,18 +17,20 @@
dialog.with_footer do
component_collection do |modal_footer|
modal_footer.with_component(
Primer::ButtonComponent.new(
data: { 'close-dialog-id': "create-work-package-dialog" }
)) do
Primer::Beta::Button.new(
data: { "close-dialog-id": "create-work-package-dialog" }
)
) do
I18n.t(:button_cancel)
end

modal_footer.with_component(
Primer::ButtonComponent.new(
Primer::Beta::Button.new(
scheme: :primary,
form: "create-work-package-form",
type: :submit
)) do
)
) do
if @work_package.persisted?
I18n.t(:button_save)
else
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,9 +130,9 @@
end %>
<% end %>
<% dialog.with_footer do %>
<%= render(Primer::ButtonComponent.new(data: { "close-dialog-id": MODAL_ID })) { I18n.t(:button_cancel) } %>
<%= render(Primer::Beta::Button.new(data: { "close-dialog-id": MODAL_ID })) { I18n.t(:button_cancel) } %>
<%= render(
Primer::ButtonComponent.new(
Primer::Beta::Button.new(
scheme: :primary,
type: :submit,
form: GENERATE_PDF_FORM_ID,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,9 @@
) %>
<% end %>
<% end %>
<%= render(Primer::ButtonComponent.new(data: { "close-dialog-id": MODAL_ID })) { I18n.t(:button_cancel) } %>
<%= render(Primer::Beta::Button.new(data: { "close-dialog-id": MODAL_ID })) { I18n.t(:button_cancel) } %>
<%= render(
Primer::ButtonComponent.new(
Primer::Beta::Button.new(
data: {
"work-packages--export--dialog-target": "submit"
},
Expand Down
13 changes: 9 additions & 4 deletions app/models/work_package_custom_field.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,15 @@ class WorkPackageCustomField < CustomField
}

scope :visible_by_user, ->(user) {
where(projects: { id: Project.visible(user) })
.where(types: { id: Type.enabled_in(Project.visible(user)) })
.or(where(is_for_all: true).references(:projects, :types))
.includes(:projects, :types)
# Prefer a subquery to a join to avoid the database query returning
# the cross product of projects, types and custom fields.
where(id:
unscoped
.where(projects: { id: Project.visible(user) })
.where(types: { id: Type.enabled_in(Project.visible(user)) })
.or(unscoped.where(is_for_all: true))
.includes(:projects, :types)
.select(:id))
}

scope :usable_as_custom_action, -> {
Expand Down
2 changes: 1 addition & 1 deletion config/locales/crowdin/af.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3789,7 +3789,7 @@ af:
heading: "Project life cycle"
heading_description: "Project life cycle define the project phases that can be used for your project planning and will appear in the overview page of each project. These attributes can be enabled or disabled but not re-ordered at a project level."
label_add: "Add"
label_add_description: "Add life cycle definition"
label_add_description: "Add project phase definition"
filter:
label: "Search project phase"
section_header: "Phases"
Expand Down
2 changes: 1 addition & 1 deletion config/locales/crowdin/ar.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3951,7 +3951,7 @@ ar:
heading: "Project life cycle"
heading_description: "Project life cycle define the project phases that can be used for your project planning and will appear in the overview page of each project. These attributes can be enabled or disabled but not re-ordered at a project level."
label_add: "Add"
label_add_description: "Add life cycle definition"
label_add_description: "Add project phase definition"
filter:
label: "Search project phase"
section_header: "Phases"
Expand Down
2 changes: 1 addition & 1 deletion config/locales/crowdin/az.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3789,7 +3789,7 @@ az:
heading: "Project life cycle"
heading_description: "Project life cycle define the project phases that can be used for your project planning and will appear in the overview page of each project. These attributes can be enabled or disabled but not re-ordered at a project level."
label_add: "Add"
label_add_description: "Add life cycle definition"
label_add_description: "Add project phase definition"
filter:
label: "Search project phase"
section_header: "Phases"
Expand Down
2 changes: 1 addition & 1 deletion config/locales/crowdin/be.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3871,7 +3871,7 @@ be:
heading: "Project life cycle"
heading_description: "Project life cycle define the project phases that can be used for your project planning and will appear in the overview page of each project. These attributes can be enabled or disabled but not re-ordered at a project level."
label_add: "Add"
label_add_description: "Add life cycle definition"
label_add_description: "Add project phase definition"
filter:
label: "Search project phase"
section_header: "Phases"
Expand Down
2 changes: 1 addition & 1 deletion config/locales/crowdin/bg.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3789,7 +3789,7 @@ bg:
heading: "Project life cycle"
heading_description: "Project life cycle define the project phases that can be used for your project planning and will appear in the overview page of each project. These attributes can be enabled or disabled but not re-ordered at a project level."
label_add: "Add"
label_add_description: "Add life cycle definition"
label_add_description: "Add project phase definition"
filter:
label: "Search project phase"
section_header: "Phases"
Expand Down
Loading
Loading