diff --git a/Gemfile.lock b/Gemfile.lock index 862202e3..f23e9bcd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -84,16 +84,16 @@ GEM rake (>= 10.4, < 14.0) ast (2.4.2) aws-eventstream (1.3.0) - aws-partitions (1.924.0) - aws-sdk-core (3.194.1) + aws-partitions (1.928.0) + aws-sdk-core (3.196.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.8) jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.80.0) + aws-sdk-kms (1.81.0) aws-sdk-core (~> 3, >= 3.193.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.149.0) + aws-sdk-s3 (1.150.0) aws-sdk-core (~> 3, >= 3.194.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.8) @@ -108,7 +108,7 @@ GEM statsd-ruby (~> 1.1) base64 (0.2.0) bcrypt (3.1.20) - bigdecimal (3.1.7) + bigdecimal (3.1.8) blueprinter (1.0.2) bootsnap (1.18.3) msgpack (~> 1.2) @@ -167,9 +167,9 @@ GEM discard (1.3.0) activerecord (>= 4.2, < 8) docile (1.4.0) - dotenv (3.1.1) - dotenv-rails (3.1.1) - dotenv (= 3.1.1) + dotenv (3.1.2) + dotenv-rails (3.1.2) + dotenv (= 3.1.2) railties (>= 6.1) drb (2.2.1) dry-cli (1.0.0) @@ -234,7 +234,7 @@ GEM globalid (1.2.1) activesupport (>= 6.1) highline (3.0.1) - i18n (1.14.4) + i18n (1.14.5) concurrent-ruby (~> 1.0) i18n-tasks (0.9.37) activesupport (>= 4.0.2) @@ -294,7 +294,7 @@ GEM mutex_m (0.2.0) net-http (0.4.1) uri - net-imap (0.4.10) + net-imap (0.4.11) date net-protocol net-pop (0.1.2) @@ -303,8 +303,8 @@ GEM timeout net-smtp (0.5.0) net-protocol - nio4r (2.7.1) - nokogiri (1.16.4-x86_64-linux) + nio4r (2.7.3) + nokogiri (1.16.5-x86_64-linux) racc (~> 1.4) orm_adapter (0.5.0) parallel (1.24.0) @@ -341,7 +341,7 @@ GEM nio4r (~> 2.0) raabro (1.4.0) racc (1.7.3) - rack (3.0.10) + rack (3.0.11) rack-mini-profiler (3.3.1) rack (>= 1.2.0) rack-proxy (0.7.7) @@ -404,8 +404,8 @@ GEM redis-client (>= 0.22.0) redis-client (0.22.1) connection_pool - regexp_parser (2.9.0) - reline (0.5.5) + regexp_parser (2.9.1) + reline (0.5.7) io-console (~> 0.5) request_store (1.7.0) rack (>= 1.4) @@ -422,7 +422,7 @@ GEM rspec-expectations (3.13.0) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-mocks (3.13.0) + rspec-mocks (3.13.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) rspec-rails (6.1.2) @@ -434,7 +434,7 @@ GEM rspec-mocks (~> 3.13) rspec-support (~> 3.13) rspec-support (3.13.1) - rubocop (1.63.4) + rubocop (1.63.5) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) @@ -502,7 +502,7 @@ GEM actionpack (>= 3.1) railties (>= 3.1) slim (>= 3.0, < 6.0, != 5.0.0) - sorbet-runtime (0.5.11368) + sorbet-runtime (0.5.11375) squasher (0.8.0) statesman (12.1.0) statsd-ruby (1.5.0) @@ -541,7 +541,7 @@ GEM websocket-extensions (0.1.5) xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.6.13) + zeitwerk (2.6.14) PLATFORMS x86_64-linux-musl diff --git a/app/controllers/manage/occupiables_controller.rb b/app/controllers/manage/occupiables_controller.rb index 96e37f1d..7b40645e 100644 --- a/app/controllers/manage/occupiables_controller.rb +++ b/app/controllers/manage/occupiables_controller.rb @@ -33,7 +33,7 @@ def update end def destroy - @occupiable.destroy + @occupiable.discarded? ? @occupiable.destroy : @occupiable.discard! respond_with :manage, @occupiable, location: manage_occupiables_path end diff --git a/app/controllers/manage/organisation_users_controller.rb b/app/controllers/manage/organisation_users_controller.rb index e0700a85..c2ad28d9 100644 --- a/app/controllers/manage/organisation_users_controller.rb +++ b/app/controllers/manage/organisation_users_controller.rb @@ -24,8 +24,8 @@ def create else email = params.dig(:organisation_user, :email) onboarding = OnboardingService.new(current_organisation) - @organisation_user = onboarding.add_or_invite_user!(email:, role: organisation_user_params[:role], - invited_by: current_user) + @organisation_user = onboarding.add_or_invite_user(email:, role: organisation_user_params[:role], + invited_by: current_user) end respond_with :manage, @organisation_user, location: manage_organisation_users_path end diff --git a/app/controllers/public/homes_controller.rb b/app/controllers/public/homes_controller.rb index ec741a84..dbafc055 100644 --- a/app/controllers/public/homes_controller.rb +++ b/app/controllers/public/homes_controller.rb @@ -5,7 +5,7 @@ class HomesController < BaseController load_and_authorize_resource :home def index - @homes = @homes.where(organisation: current_organisation).active + @homes = @homes.where(organisation: current_organisation).kept respond_with :public, @homes end diff --git a/app/javascript/components/occupiables/OccupiableSelect.tsx b/app/javascript/components/occupiables/OccupiableSelect.tsx index 88b0657a..b2f56985 100644 --- a/app/javascript/components/occupiables/OccupiableSelect.tsx +++ b/app/javascript/components/occupiables/OccupiableSelect.tsx @@ -38,7 +38,7 @@ export default function OccupiableSelect({ const organisation = useContext(OrganisationContext); const home = organisation?.homes?.find((home) => home.id === homeId); const occupiables = home?.occupiables - ?.filter((occupiable) => occupiable.occupiable && occupiable.active) + ?.filter((occupiable) => occupiable.occupiable && !occupiable.discarded_at) ?.sort(ordinalOrder); const hideHomeSelect = organisation?.homes?.length === 1; const setHomeId = (homeId: number) => { diff --git a/app/javascript/types.d.ts b/app/javascript/types.d.ts index 7d7d1346..e29b67c6 100644 --- a/app/javascript/types.d.ts +++ b/app/javascript/types.d.ts @@ -29,24 +29,12 @@ export type BookingCategory = { title_i18n: TranslatedString; }; -export type Home = { - id: number; - active: boolean; - description: string; - description_i18n: TranslatedString; - home_id: number; - name: string; - name_i18n: TranslatedString; - occupiable: boolean; - occupiables: Occupiable[]; -}; - export type Occupiable = { id: number; organisation_id: number; ref: string | null; // janitor: null; - active: boolean; + discarded_at: string; created_at: Date; updated_at: Date; occupiable: boolean; @@ -54,5 +42,11 @@ export type Occupiable = { // settings: Settings; ordinal: number | undefined; name_i18n: TranslatedString; + name: string; description_i18n: TranslatedString; + description: string; +}; + +export type Home = Occupiable & { + occupiables: Occupiable[]; }; diff --git a/app/models/ability.rb b/app/models/ability.rb index d9b5d1aa..f463d069 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -98,10 +98,10 @@ class Manage < Base class Public < Base role nil do |_user, organisation| - can :read, Home, { organisation:, active: true } - can :read, Occupiable, { organisation:, active: true } + can :read, Home, { organisation:, discarded_at: nil } + can :read, Occupiable, { organisation:, discarded_at: nil } - can %i[read embed calendar at], Occupancy, occupiable: { active: true, organisation: } + can %i[read embed calendar at], Occupancy, occupiable: { discarded_at: nil, organisation: } can %i[create read update], AgentBooking, { organisation: } can %i[create read update], Booking, { organisation:, concluded: false } @@ -109,7 +109,7 @@ class Public < Base role :readonly do |_user, organisation| can :read, Home, { organisation: } - can :read, Occupiable, { organisation:, active: true } + can :read, Occupiable, { organisation: } can :read, Organisation, id: organisation.id can %i[read embed calendar at], Occupancy, occupiable: { organisation: } diff --git a/app/models/home.rb b/app/models/home.rb index e2d2c780..208c8383 100644 --- a/app/models/home.rb +++ b/app/models/home.rb @@ -5,8 +5,8 @@ # Table name: occupiables # # id :bigint not null, primary key -# active :boolean default(FALSE) # description_i18n :jsonb +# discarded_at :datetime # janitor :text # name_i18n :jsonb # occupiable :boolean default(FALSE) @@ -21,6 +21,7 @@ # # Indexes # +# index_occupiables_on_discarded_at (discarded_at) # index_occupiables_on_home_id (home_id) # index_occupiables_on_organisation_id (organisation_id) # index_occupiables_on_ref_and_organisation_id (ref,organisation_id) UNIQUE diff --git a/app/models/invoice_part.rb b/app/models/invoice_part.rb index 4aeb570f..23682bc1 100644 --- a/app/models/invoice_part.rb +++ b/app/models/invoice_part.rb @@ -84,8 +84,7 @@ class Filter < ApplicationFilter filter :homes do |invoice_parts| relevant_homes = Array.wrap(homes).compact_blank if relevant_homes.present? - invoice_parts.joins(invoice: :booking) - .where(invoice: { bookings: { home_id: relevant_homes } }) + invoice_parts.joins(invoice: :booking).where(invoices: { bookings: { home_id: relevant_homes } }) end end diff --git a/app/models/occupiable.rb b/app/models/occupiable.rb index 766283a3..a9dcb44a 100644 --- a/app/models/occupiable.rb +++ b/app/models/occupiable.rb @@ -5,8 +5,8 @@ # Table name: occupiables # # id :bigint not null, primary key -# active :boolean default(FALSE) # description_i18n :jsonb +# discarded_at :datetime # janitor :text # name_i18n :jsonb # occupiable :boolean default(FALSE) @@ -21,6 +21,7 @@ # # Indexes # +# index_occupiables_on_discarded_at (discarded_at) # index_occupiables_on_home_id (home_id) # index_occupiables_on_organisation_id (organisation_id) # index_occupiables_on_ref_and_organisation_id (ref,organisation_id) UNIQUE @@ -32,6 +33,7 @@ class Occupiable < ApplicationRecord include RankedModel + include Discard::Model extend Mobility has_many :occupancies, -> { ordered }, inverse_of: :occupiable, dependent: :restrict_with_error @@ -46,7 +48,6 @@ class Occupiable < ApplicationRecord normalizes :ref, with: -> { _1.presence&.strip } scope :occupiable, -> { where(occupiable: true) } - scope :active, -> { where(active: true) } scope :ordered, -> { rank(:ordinal) } validates :name, presence: true diff --git a/app/params/manage/occupiable_params.rb b/app/params/manage/occupiable_params.rb index f182447f..652f15a4 100644 --- a/app/params/manage/occupiable_params.rb +++ b/app/params/manage/occupiable_params.rb @@ -3,7 +3,7 @@ module Manage class OccupiableParams < ApplicationParams def self.permitted_keys - %i[name description active occupiable type ref home_id ordinal_position] + + %i[name description occupiable type ref home_id ordinal_position] + I18n.available_locales.map { |locale| ["name_#{locale}", "description_#{locale}"] }.flatten + [{ settings: %i[booking_margin] }] end diff --git a/app/serializers/manage/home_serializer.rb b/app/serializers/manage/home_serializer.rb index 28c73979..226231de 100644 --- a/app/serializers/manage/home_serializer.rb +++ b/app/serializers/manage/home_serializer.rb @@ -5,7 +5,7 @@ class HomeSerializer < Public::HomeSerializer fields :janitor, :description view :export do - fields :active, :occupiable, :home_id + fields :discarded_at, :occupiable, :home_id include_view :default end diff --git a/app/serializers/public/home_serializer.rb b/app/serializers/public/home_serializer.rb index b94ce696..ad108c3c 100644 --- a/app/serializers/public/home_serializer.rb +++ b/app/serializers/public/home_serializer.rb @@ -3,7 +3,7 @@ module Public class HomeSerializer < OccupiableSerializer association :occupiables, blueprint: Public::OccupiableSerializer do |home| - home.occupiables.active + home.occupiables.kept end end end diff --git a/app/serializers/public/occupiable_serializer.rb b/app/serializers/public/occupiable_serializer.rb index a70dfa28..03c71a58 100644 --- a/app/serializers/public/occupiable_serializer.rb +++ b/app/serializers/public/occupiable_serializer.rb @@ -3,6 +3,6 @@ module Public class OccupiableSerializer < ApplicationSerializer identifier :id - fields :name, :description, :active, :occupiable, :home_id, :name_i18n, :description_i18n, :ordinal + fields :name, :description, :discarded_at, :occupiable, :home_id, :name_i18n, :description_i18n, :ordinal end end diff --git a/app/serializers/public/organisation_serializer.rb b/app/serializers/public/organisation_serializer.rb index b8de11f6..a54ba247 100644 --- a/app/serializers/public/organisation_serializer.rb +++ b/app/serializers/public/organisation_serializer.rb @@ -6,7 +6,7 @@ class OrganisationSerializer < ApplicationSerializer association :booking_categories, blueprint: Public::BookingCategorySerializer association :homes, blueprint: Public::HomeSerializer do |organisation| - organisation.homes.active + organisation.homes.kept end fields :name, :address, :email, :currency, :country_code diff --git a/app/services/import/hash/home_importer.rb b/app/services/import/hash/home_importer.rb index 11df8cc8..cc1ec659 100644 --- a/app/services/import/hash/home_importer.rb +++ b/app/services/import/hash/home_importer.rb @@ -5,7 +5,7 @@ module Hash class HomeImporter < Base attr_reader :organisation - use_attributes(*%w[name description active ref occupiable home_id]) + use_attributes(*%w[name description discarded_at ref occupiable home_id]) def initialize(organisation, **options) super(**options) diff --git a/app/services/onboarding_service.rb b/app/services/onboarding_service.rb index ec24682f..87627200 100644 --- a/app/services/onboarding_service.rb +++ b/app/services/onboarding_service.rb @@ -15,7 +15,11 @@ def self.clone_organisation(origin) new(origin.dup) end - def add_or_invite_user!(email: organisation.email, role: :manager, invited_by: nil, password: nil) + def add_or_invite_user!(...) + add_or_invite_user(...).save! + end + + def add_or_invite_user(email: organisation.email, role: :manager, invited_by: nil, password: nil) user = User.find_or_initialize_by(email:) if user.new_record? @@ -23,8 +27,8 @@ def add_or_invite_user!(email: organisation.email, role: :manager, invited_by: n user.invite!(invited_by) if password.blank? end - user.organisation_users.create!(organisation:, role:).tap do - user.update!(default_organisation: organisation) if user.default_organisation.blank? + user.organisation_users.create(organisation:, role:).tap do + user.update(default_organisation: organisation) if user.default_organisation.blank? end end diff --git a/app/views/manage/notifications/index.html.slim b/app/views/manage/notifications/index.html.slim index a163ed9e..def8a6c6 100644 --- a/app/views/manage/notifications/index.html.slim +++ b/app/views/manage/notifications/index.html.slim @@ -11,6 +11,7 @@ table.table.table-hover.align-middle tr - if @booking.blank? th= Booking.model_name.human + th= Notification.human_attribute_name(:created_at) th= Notification.human_attribute_name(:sent_at) th= Notification.human_attribute_name(:to) th= Notification.human_attribute_name(:subject) @@ -21,15 +22,21 @@ table.table.table-hover.align-middle tr[data-href=manage_notification_path(notification)] - if @booking.blank? td - = link_to notification.booking.ref, manage_booking_path(notification.booking) + = link_to notification.booking.ref, manage_booking_path(notification.booking) td - - if notification.sent_at - = l(notification.sent_at, format: :short) - - else - = '-' + = l(notification.created_at) + + td + = notification.sent_at.present? ? l(notification.sent_at) : '-' - if notification.delivered_at.present? span.fa.fa-check.text-success.ms-1 + - if notification.sent_at + = l(notification.sent_at, format: :short) + - else + = '-' + - if notification.delivered_at.present? + span.fa.fa-check.text-success.ms-1 td - notification.deliver_to.each do |to| diff --git a/app/views/manage/occupancies/_form.html.slim b/app/views/manage/occupancies/_form.html.slim index a35037e5..7a320b6c 100644 --- a/app/views/manage/occupancies/_form.html.slim +++ b/app/views/manage/occupancies/_form.html.slim @@ -1,7 +1,7 @@ = form_with(model: [:manage, @occupiable&.becomes(Occupiable), @occupancy], local: true) do |f| fieldset - = f.collection_select :occupiable_id, current_organisation.occupiables.active.ordered, :id, :to_s, include_blank: true + = f.collection_select :occupiable_id, current_organisation.occupiables.kept.ordered, :id, :to_s, include_blank: true = f.datetime_field :begins_at = f.datetime_field :ends_at diff --git a/app/views/manage/occupiables/_form.html.slim b/app/views/manage/occupiables/_form.html.slim index de129239..c26a3980 100644 --- a/app/views/manage/occupiables/_form.html.slim +++ b/app/views/manage/occupiables/_form.html.slim @@ -20,7 +20,6 @@ fieldset = f.select :type, [Home, Occupiable].map { |type| [type.model_name.human, type.to_s] } = f.text_field :ref - = f.check_box :active = f.check_box :occupiable = f.collection_select :home_id, current_organisation.homes, :id, :to_s, include_blank: true = f.text_field :ordinal_position diff --git a/app/views/manage/occupiables/index.html.slim b/app/views/manage/occupiables/index.html.slim index 1ee918d6..446b16cf 100644 --- a/app/views/manage/occupiables/index.html.slim +++ b/app/views/manage/occupiables/index.html.slim @@ -5,15 +5,20 @@ h1.mt-0.mb-5= Occupiable.model_name.human(count: 2) - @occupiables.each do |occupiable| .col-md-3.mb-5 .card.shadow-sm.h-100 - .card-img-top.bg-secondary.bg-gradient.ratio.ratio-16x9 + .card-img-top.bg-secondary.bg-gradient.ratio.ratio-16x9[class=('opacity-50' if occupiable.discarded?)] - if occupiable.cover_image_url.present? img.card-img-top src=occupiable.cover_image_url alt=occupiable.name height=200 - .card-body + .card-body[class=('opacity-50' if occupiable.discarded?)] h5.card-title.m-0=occupiable.name p =occupiable.description p.m-0= link_to Occupancy.model_name.human(count: 2), manage_occupiable_occupancies_path(occupiable) - p.m-0= link_to t('edit'), edit_manage_occupiable_path(occupiable) + .mt-3.d-flex.justify-content-end + - unless occupiable.discarded? + = link_to edit_manage_occupiable_path(occupiable), class: 'btn btn-default' do + span.fa.fa-edit + = link_to manage_occupiable_path(occupiable), data: { confirm: t(:confirm) }, method: :delete, title: t(:destroy), class: 'btn btn-default' do + span.fa.fa-trash br = link_to new_manage_occupiable_path, class: 'btn btn-primary' do diff --git a/app/views/manage/organisation_users/_form.html.slim b/app/views/manage/organisation_users/_form.html.slim index 61a4b5bc..d9589a96 100644 --- a/app/views/manage/organisation_users/_form.html.slim +++ b/app/views/manage/organisation_users/_form.html.slim @@ -7,12 +7,14 @@ = f.email_field :email, disabled: !@organisation_user.new_record? = f.select :role, OrganisationUser.roles.keys.map { |role| [OrganisationUser.human_enum(:role, role), role] } - fieldset - = f.label :token - .input-group.mb-3 - = f.text_field :token, disabled: true, skip_label: true, wrapper: false - = f.button :regenerate_token, value: '1', class: 'btn btn-outline-danger' - = t(".regenerate_token") + + - if @organisation_user.persisted? + fieldset + = f.label :token + .input-group.mb-3 + = f.text_field :token, disabled: true, skip_label: true, wrapper: false + = f.button :regenerate_token, value: '1', class: 'btn btn-outline-danger' + = t(".regenerate_token") .form-actions.pt-4.mt-3 = f.submit diff --git a/app/views/public/homes/index.html.slim b/app/views/public/homes/index.html.slim index 728825c5..80a9fd2f 100644 --- a/app/views/public/homes/index.html.slim +++ b/app/views/public/homes/index.html.slim @@ -1,4 +1,4 @@ -- current_organisation.homes.active.ordered.each do |home| +- current_organisation.homes.kept.ordered.each do |home| .card.shadow-sm.my-3 .card-body h1.mt-2.text-center[id="home-#{home.id}"] diff --git a/app/views/public/homes/show.html.slim b/app/views/public/homes/show.html.slim index 02209f6e..fe4afece 100644 --- a/app/views/public/homes/show.html.slim +++ b/app/views/public/homes/show.html.slim @@ -1,7 +1,7 @@ h1.mt-2.text-center = @home -- @home.occupiables.active.ordered.each do |occupiable| +- @home.occupiables.kept.ordered.each do |occupiable| .card.shadow-sm.my-3 .card-body h1.mt-2.text-center[id="occupiable-#{occupiable.id}"] diff --git a/app/views/public/occupiables/_select.html.slim b/app/views/public/occupiables/_select.html.slim index 416720ac..37e66963 100644 --- a/app/views/public/occupiables/_select.html.slim +++ b/app/views/public/occupiables/_select.html.slim @@ -1,6 +1,6 @@ fieldset.occupiables-select - occupancies = booking.occupancies.index_by { |occupancy| occupancy.occupiable } - - homes = current_organisation.homes.active + - homes = current_organisation.homes.kept - if homes.count <= 1 = form.hidden_field :home_id, value: homes.first&.id diff --git a/config/locales/de.yml b/config/locales/de.yml index f1079597..05a20f7a 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -248,7 +248,6 @@ de: occupiable_id: Mietobjekt remarks: Bemerkungen occupiable: - active: Aktiv description: Beschreibung home_id: Hauptmietobjekt name: Name diff --git a/config/locales/en.yml b/config/locales/en.yml index e3d51a9c..29e095fb 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -207,7 +207,6 @@ en: occupiable_id: Mietobjekt remarks: Bemerkungen occupiable: - active: Aktiv description: Beschreibung home_id: Hauptmietobjekt name: Name diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 36ed0095..d51ba7c3 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -247,7 +247,6 @@ fr: occupiable_id: Objet de location remarks: Remarques occupiable: - active: Actif description: Description home_id: Principal objet de location name: Nom diff --git a/config/locales/it.yml b/config/locales/it.yml index 5519c60b..9f467610 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -247,7 +247,6 @@ it: occupiable_id: Proprietà in affitto remarks: Osservazioni occupiable: - active: Attivo description: Descrizione home_id: Oggetto principale di affitto name: Nome diff --git a/db/migrate/20240507112036_remove_active_from_occupiables.rb b/db/migrate/20240507112036_remove_active_from_occupiables.rb new file mode 100644 index 00000000..5c48b744 --- /dev/null +++ b/db/migrate/20240507112036_remove_active_from_occupiables.rb @@ -0,0 +1,12 @@ +class RemoveActiveFromOccupiables < ActiveRecord::Migration[7.1] + def change + add_column :occupiables, :discarded_at, :datetime + add_index :occupiables, :discarded_at + + reversible do |direction| + Occupiable.where(active: false).update_all(discarded_at: Time.zone.now) + end + + remove_column :occupiables, :active, :boolean, default: true + end +end diff --git a/db/schema.rb b/db/schema.rb index 697e5e1f..27e4ae23 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2024_04_23_074713) do +ActiveRecord::Schema[7.1].define(version: 2024_05_07_112036) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" enable_extension "plpgsql" @@ -375,7 +375,6 @@ t.bigint "organisation_id", null: false t.string "ref" t.text "janitor" - t.boolean "active", default: false t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false t.string "type" @@ -385,6 +384,8 @@ t.integer "ordinal" t.jsonb "name_i18n" t.jsonb "description_i18n" + t.datetime "discarded_at" + t.index ["discarded_at"], name: "index_occupiables_on_discarded_at" t.index ["home_id"], name: "index_occupiables_on_home_id" t.index ["organisation_id"], name: "index_occupiables_on_organisation_id" t.index ["ref", "organisation_id"], name: "index_occupiables_on_ref_and_organisation_id", unique: true diff --git a/db/seeds/demo.json b/db/seeds/demo.json index d30f28f7..d2d33d84 100644 --- a/db/seeds/demo.json +++ b/db/seeds/demo.json @@ -31,7 +31,6 @@ "id": 1, "name": "Pfadiheim Stolz", "occupiable": true, - "active": true, "home_id": 1 } ], diff --git a/db/seeds/development.json b/db/seeds/development.json index 6848d88f..7385fc49 100644 --- a/db/seeds/development.json +++ b/db/seeds/development.json @@ -30,7 +30,6 @@ "description": "9876 Einsiedeln", "id": 1, "name": "Pfadiheim Stolz", - "active": true, "occupiable": true, "home_id": 1 } diff --git a/spec/factories/occupiables.rb b/spec/factories/occupiables.rb index 71050bbe..2c7cb9b3 100644 --- a/spec/factories/occupiables.rb +++ b/spec/factories/occupiables.rb @@ -5,8 +5,8 @@ # Table name: occupiables # # id :bigint not null, primary key -# active :boolean default(FALSE) # description_i18n :jsonb +# discarded_at :datetime # janitor :text # name_i18n :jsonb # occupiable :boolean default(FALSE) @@ -21,6 +21,7 @@ # # Indexes # +# index_occupiables_on_discarded_at (discarded_at) # index_occupiables_on_home_id (home_id) # index_occupiables_on_organisation_id (organisation_id) # index_occupiables_on_ref_and_organisation_id (ref,organisation_id) UNIQUE @@ -36,7 +37,6 @@ name { "Pfadiheim #{Faker::Address.city}" } description { "#{Faker::Address.zip_code} #{Faker::Address.city}" } sequence(:ref) { |i| "H#{i}" } - active { true } occupiable { true } factory :home, class: 'Home' diff --git a/spec/features/manage/occupiable_spec.rb b/spec/features/manage/occupiable_spec.rb index 74c1568d..b823292f 100644 --- a/spec/features/manage/occupiable_spec.rb +++ b/spec/features/manage/occupiable_spec.rb @@ -33,11 +33,9 @@ it 'can delete existing occupiable' do occupiable - visit manage_occupiables_path(org: nil) - click_link I18n.t('edit') + visit edit_manage_occupiable_path(occupiable, org: nil) click_link I18n.t('destroy') page.driver.browser.switch_to.alert.accept expect(page).to have_content I18n.t('flash.actions.destroy.notice', resource_name: Occupiable.model_name.human) - expect(page).not_to have_content occupiable.name end end diff --git a/spec/services/booking_ref_service_spec.rb b/spec/services/booking_ref_service_spec.rb index 2daed223..5f3c4bf7 100644 --- a/spec/services/booking_ref_service_spec.rb +++ b/spec/services/booking_ref_service_spec.rb @@ -40,7 +40,7 @@ let(:template) { '%s-%04d%02d' } let(:occupiables) do %w[A B C].map do |ref| - create(:occupiable, home:, organisation:, ref:, active: true, occupiable: true) + create(:occupiable, home:, organisation:, ref:, occupiable: true) end end let(:booking) do diff --git a/yarn.lock b/yarn.lock index e44778bc..be01c3c8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1095,12 +1095,12 @@ resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz#465aa42f268599729350e305e1ae14a30c1daf51" integrity sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA== -"@csstools/postcss-cascade-layers@^4.0.4": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.4.tgz#0f20882d4f528a8128b0855ce63c3e6eee6d1b44" - integrity sha512-MKErv8lpEwVmAcAwidY1Kfd3oWrh2Q14kxHs9xn26XzjP/PrcdngWq63lJsZeMlBY7o+WlEOeE+FP6zPzeY2uw== +"@csstools/postcss-cascade-layers@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.6.tgz#5a421cd2d5792d1eb8c28e682dc5f2c3b85cb045" + integrity sha512-Xt00qGAQyqAODFiFEJNkTpSUz5VfYqnDLECdlA/Vv17nl/OIV5QfTRHGAXrBGG5YcJyHpJ+GF9gF/RZvOQz4oA== dependencies: - "@csstools/selector-specificity" "^3.0.3" + "@csstools/selector-specificity" "^3.1.1" postcss-selector-parser "^6.0.13" "@csstools/postcss-color-function@^3.0.16": @@ -1187,12 +1187,12 @@ resolved "https://registry.yarnpkg.com/@csstools/postcss-initial/-/postcss-initial-1.0.1.tgz#5aa378de9bfd0e6e377433f8986bdecf579e1268" integrity sha512-wtb+IbUIrIf8CrN6MLQuFR7nlU5C7PwuebfeEXfjthUha1+XZj2RVi+5k/lukToA24sZkYAiSJfHM8uG/UZIdg== -"@csstools/postcss-is-pseudo-class@^4.0.6": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.6.tgz#149b3bf9dde739932a545079da917ca25464cba0" - integrity sha512-HilOhAsMpFheMYkuaREZx+CGa4hsG6kQdzwXSsuqKDFzYz2eIMP213+3dH/vUbPXaWrzqLKr8m3i0dgYPoh7vg== +"@csstools/postcss-is-pseudo-class@^4.0.8": + version "4.0.8" + resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.8.tgz#d2bcc6c2d86d9653c333926a9ea488c2fc221a7f" + integrity sha512-0aj591yGlq5Qac+plaWCbn5cpjs5Sh0daovYUKJUOMjIp70prGH/XPLp7QjxtbFXz3CTvb0H9a35dpEuIuUi3Q== dependencies: - "@csstools/selector-specificity" "^3.0.3" + "@csstools/selector-specificity" "^3.1.1" postcss-selector-parser "^6.0.13" "@csstools/postcss-light-dark-function@^1.0.5": @@ -1341,10 +1341,10 @@ resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-1.1.0.tgz#d872f2da402d3ce8bd0cf16ea5f9fba76b18e430" integrity sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg== -"@csstools/selector-specificity@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz#208a3929ee614967a1fc8cd6cb758d9fcbf0caae" - integrity sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q== +"@csstools/selector-specificity@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz#63085d2995ca0f0e55aa8b8a07d69bfd48b844fe" + integrity sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA== "@csstools/utilities@^1.0.0": version "1.0.0" @@ -1727,9 +1727,9 @@ dequal "^2.0.3" "@restart/ui@^1.6.8": - version "1.6.8" - resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.6.8.tgz#61b73503d4690e2f0f58992d4d6ae1e89c276791" - integrity sha512-6ndCv3oZ7r9vuP1Ok9KH55TM1/UkdBnP/fSraW0DFDMbPMzWKhVKeFAIEUCRCSdzayjZDcFYK6xbMlipN9dmMA== + version "1.6.9" + resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.6.9.tgz#05ec905a56486fa39b62f29c09b3917e57acd62f" + integrity sha512-mUbygUsJcRurjZCt1f77gg4DpheD1D+Sc7J3JjAkysUj7t8m4EBJVOqWC9788Qtbc69cJ+HlJc6jBguKwS8Mcw== dependencies: "@babel/runtime" "^7.21.0" "@popperjs/core" "^2.11.6" @@ -1905,21 +1905,21 @@ "@types/istanbul-lib-report" "*" "@types/jquery@*": - version "3.5.29" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.29.tgz#3c06a1f519cd5fc3a7a108971436c00685b5dcea" - integrity sha512-oXQQC9X9MOPRrMhPHHOsXqeQDnWeCDT3PelUIg/Oy8FAbzSZtFHRjc7IpbfFVmpLtJ+UOoywpRsuO5Jxjybyeg== + version "3.5.30" + resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.30.tgz#888d584cbf844d3df56834b69925085038fd80f7" + integrity sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A== dependencies: "@types/sizzle" "*" -"@types/json-schema@^7.0.15", "@types/json-schema@^7.0.9": +"@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/node@*": - version "20.12.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.8.tgz#35897bf2bfe3469847ab04634636de09552e8256" - integrity sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w== + version "20.12.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.12.tgz#7cbecdf902085cec634fdb362172dfe12b8f2050" + integrity sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw== dependencies: undici-types "~5.26.4" @@ -1948,18 +1948,13 @@ "@types/react" "*" "@types/react@*", "@types/react@>=16.9.11", "@types/react@^18.3.1": - version "18.3.1" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.1.tgz#fed43985caa834a2084d002e4771e15dfcbdbe8e" - integrity sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw== + version "18.3.2" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.2.tgz#462ae4904973bc212fa910424d901e3d137dbfcd" + integrity sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w== dependencies: "@types/prop-types" "*" csstype "^3.0.2" -"@types/semver@^7.5.8": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - "@types/sizzle@*": version "2.3.8" resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.8.tgz#518609aefb797da19bf222feb199e8f653ff7627" @@ -1995,63 +1990,61 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^7.8.0": - version "7.8.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.8.0.tgz#c78e309fe967cb4de05b85cdc876fb95f8e01b6f" - integrity sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg== + version "7.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.9.0.tgz#093b96fc4e342226e65d5f18f9c87081e0b04a31" + integrity sha512-6e+X0X3sFe/G/54aC3jt0txuMTURqLyekmEHViqyA2VnxhLMpvA6nqmcjIy+Cr9tLDHPssA74BP5Mx9HQIxBEA== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "7.8.0" - "@typescript-eslint/type-utils" "7.8.0" - "@typescript-eslint/utils" "7.8.0" - "@typescript-eslint/visitor-keys" "7.8.0" - debug "^4.3.4" + "@typescript-eslint/scope-manager" "7.9.0" + "@typescript-eslint/type-utils" "7.9.0" + "@typescript-eslint/utils" "7.9.0" + "@typescript-eslint/visitor-keys" "7.9.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" - semver "^7.6.0" ts-api-utils "^1.3.0" "@typescript-eslint/parser@^7.8.0": - version "7.8.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.8.0.tgz#1e1db30c8ab832caffee5f37e677dbcb9357ddc8" - integrity sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ== - dependencies: - "@typescript-eslint/scope-manager" "7.8.0" - "@typescript-eslint/types" "7.8.0" - "@typescript-eslint/typescript-estree" "7.8.0" - "@typescript-eslint/visitor-keys" "7.8.0" + version "7.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.9.0.tgz#fb3ba01b75e0e65cb78037a360961b00301f6c70" + integrity sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ== + dependencies: + "@typescript-eslint/scope-manager" "7.9.0" + "@typescript-eslint/types" "7.9.0" + "@typescript-eslint/typescript-estree" "7.9.0" + "@typescript-eslint/visitor-keys" "7.9.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@7.8.0": - version "7.8.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz#bb19096d11ec6b87fb6640d921df19b813e02047" - integrity sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g== +"@typescript-eslint/scope-manager@7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz#1dd3e63a4411db356a9d040e75864851b5f2619b" + integrity sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ== dependencies: - "@typescript-eslint/types" "7.8.0" - "@typescript-eslint/visitor-keys" "7.8.0" + "@typescript-eslint/types" "7.9.0" + "@typescript-eslint/visitor-keys" "7.9.0" -"@typescript-eslint/type-utils@7.8.0": - version "7.8.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.8.0.tgz#9de166f182a6e4d1c5da76e94880e91831e3e26f" - integrity sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A== +"@typescript-eslint/type-utils@7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.9.0.tgz#f523262e1b66ca65540b7a65a1222db52e0a90c9" + integrity sha512-6Qy8dfut0PFrFRAZsGzuLoM4hre4gjzWJB6sUvdunCYZsYemTkzZNwF1rnGea326PHPT3zn5Lmg32M/xfJfByA== dependencies: - "@typescript-eslint/typescript-estree" "7.8.0" - "@typescript-eslint/utils" "7.8.0" + "@typescript-eslint/typescript-estree" "7.9.0" + "@typescript-eslint/utils" "7.9.0" debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/types@7.8.0": - version "7.8.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.8.0.tgz#1fd2577b3ad883b769546e2d1ef379f929a7091d" - integrity sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw== +"@typescript-eslint/types@7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.9.0.tgz#b58e485e4bfba055659c7e683ad4f5f0821ae2ec" + integrity sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w== -"@typescript-eslint/typescript-estree@7.8.0": - version "7.8.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz#b028a9226860b66e623c1ee55cc2464b95d2987c" - integrity sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg== +"@typescript-eslint/typescript-estree@7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz#3395e27656060dc313a6b406c3a298b729685e07" + integrity sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg== dependencies: - "@typescript-eslint/types" "7.8.0" - "@typescript-eslint/visitor-keys" "7.8.0" + "@typescript-eslint/types" "7.9.0" + "@typescript-eslint/visitor-keys" "7.9.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -2059,25 +2052,22 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@7.8.0": - version "7.8.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.8.0.tgz#57a79f9c0c0740ead2f622e444cfaeeb9fd047cd" - integrity sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ== +"@typescript-eslint/utils@7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.9.0.tgz#1b96a34eefdca1c820cb1bbc2751d848b4540899" + integrity sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.15" - "@types/semver" "^7.5.8" - "@typescript-eslint/scope-manager" "7.8.0" - "@typescript-eslint/types" "7.8.0" - "@typescript-eslint/typescript-estree" "7.8.0" - semver "^7.6.0" + "@typescript-eslint/scope-manager" "7.9.0" + "@typescript-eslint/types" "7.9.0" + "@typescript-eslint/typescript-estree" "7.9.0" -"@typescript-eslint/visitor-keys@7.8.0": - version "7.8.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz#7285aab991da8bee411a42edbd5db760d22fdd91" - integrity sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA== +"@typescript-eslint/visitor-keys@7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz#82162656e339c3def02895f5c8546f6888d9b9ea" + integrity sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ== dependencies: - "@typescript-eslint/types" "7.8.0" + "@typescript-eslint/types" "7.9.0" eslint-visitor-keys "^3.4.3" "@vitejs/plugin-react@^4.2.1": @@ -2409,9 +2399,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599: - version "1.0.30001616" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001616.tgz#4342712750d35f71ebba9fcac65e2cf8870013c3" - integrity sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw== + version "1.0.30001618" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001618.tgz#fad74fa006aef0f01e8e5c0a5540c74d8d36ec6f" + integrity sha512-p407+D1tIkDvsEAPS22lJxLQQaG8OTBEqo0KhzfABGk0TU4juBNDSfH0hyAp/HRyx+M8L17z/ltyhxh27FTfQg== chalk@^2.4.2: version "2.4.2" @@ -2517,9 +2507,9 @@ convert-source-map@^2.0.0: integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== core-js-compat@^3.31.0, core-js-compat@^3.36.1: - version "3.37.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.0.tgz#d9570e544163779bb4dff1031c7972f44918dc73" - integrity sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA== + version "3.37.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.1.tgz#c844310c7852f4bdf49b8d339730b97e17ff09ee" + integrity sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg== dependencies: browserslist "^4.23.0" @@ -2555,12 +2545,12 @@ css-declaration-sorter@^7.2.0: resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz#6dec1c9523bc4a643e088aab8f09e67a54961024" integrity sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow== -css-has-pseudo@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-6.0.3.tgz#babd8f208507d553b3986ee803b3adf4dd09c00e" - integrity sha512-qIsDxK/z0byH/mpNsv5hzQ5NOl8m1FRmOLgZpx4bG5uYHnOlO2XafeMI4mFIgNSViHwoUWcxSJZyyijaAmbs+A== +css-has-pseudo@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-6.0.5.tgz#372e7293ef9bb901ec0bdce85a6fc1365012fa2c" + integrity sha512-ZTv6RlvJJZKp32jPYnAJVhowDCrRrHUTAxsYSuUPBEDJjzws6neMnzkRblxtgmv1RgcV5dhH2gn7E3wA9Wt6lw== dependencies: - "@csstools/selector-specificity" "^3.0.3" + "@csstools/selector-specificity" "^3.1.1" postcss-selector-parser "^6.0.13" postcss-value-parser "^4.2.0" @@ -2628,9 +2618,9 @@ css-what@^6.1.0: integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== cssdb@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.0.0.tgz#7fdaea83364f6c9edc364e7681ebef644a327d3d" - integrity sha512-hfpm8VXc7/dhcEWpLvKDLwImOSk1sa2DxL36OEiY/4h2MGfKjPYIMZo4hnEEl+TCJr2GwcX46jF5TafRASDe9w== + version "8.0.1" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.0.1.tgz#970b4d1890715625ba25999454e9c9aca7b1e809" + integrity sha512-diegY/vnOYmPXY0bOBj5jeHaiK8MMpjgPuipirY8pF9AthtqEXgqVdKF5tnb6RTc/ZdhQqG0TBnInQ5CbbUW7Q== cssesc@^3.0.0: version "3.0.0" @@ -2823,9 +2813,9 @@ domutils@^3.0.1: domhandler "^5.0.3" electron-to-chromium@^1.4.668: - version "1.4.756" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.756.tgz#7b872ed8c8c5bee571be771730225d6d2a37fe45" - integrity sha512-RJKZ9+vEBMeiPAvKNWyZjuYyUqMndcP1f335oHqn3BEQbs2NFtVrnK5+6Xg5wSM9TknNNpWghGDUCKGYF+xWXw== + version "1.4.767" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.767.tgz#b885cfefda5a2e7a7ee356c567602012294ed260" + integrity sha512-nzzHfmQqBss7CE3apQHkHjXW77+8w3ubGCIoEijKCJebPufREaFETgGXWTkh32t259F3Kcq+R8MZdFdOJROgYw== emojis-list@^3.0.0: version "3.0.0" @@ -3418,9 +3408,9 @@ html-parse-stringify@^3.0.1: void-elements "3.1.0" i18next@^23.11.3: - version "23.11.3" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.11.3.tgz#d269c9c15bae9d90ab291055cfc433089ca5f77b" - integrity sha512-Pq/aSKowir7JM0rj+Wa23Kb6KKDUGno/HjG+wRQu0PxoTbpQ4N89MAT0rFGvXmLkRLNMb1BbBOKGozl01dabzg== + version "23.11.4" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.11.4.tgz#3f0e620fd2cff3825324191615d0ab0a1eec3baf" + integrity sha512-CCUjtd5TfaCl+mLUzAA0uPSN+AVn4fP/kWCYt/hocPUwusTpMVczdrRyOBUwk6N05iH40qiKx6q1DoNJtBIwdg== dependencies: "@babel/runtime" "^7.23.2" @@ -3435,9 +3425,9 @@ ignore@^5.2.0, ignore@^5.3.1: integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== immutable@^4.0.0: - version "4.3.5" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" - integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== + version "4.3.6" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.6.tgz#6a05f7858213238e587fb83586ffa3b4b27f0447" + integrity sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ== import-fresh@^3.2.1: version "3.3.0" @@ -3835,13 +3825,6 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - mdn-data@2.0.28: version "2.0.28" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" @@ -4066,10 +4049,10 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.0, picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" @@ -4362,13 +4345,13 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-nesting@^12.1.2: - version "12.1.2" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-12.1.2.tgz#e7aba3f73b86a0e944e84798d481b54dcfce802e" - integrity sha512-FUmTHGDNundodutB4PUBxt/EPuhgtpk8FJGRsBhOuy+6FnkR2A8RZWIsyyy6XmhvX2DZQQWIkvu+HB4IbJm+Ew== +postcss-nesting@^12.1.4: + version "12.1.4" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-12.1.4.tgz#b79451b22ac1abe96b9aa2f01b27a6f8c447d353" + integrity sha512-CcHOq94K137E+U4Ommu7pexcpp0Tjm24zl4UcqWs1oSLAr5cLI+jLrqQ5h/bdjhMX6cMbzunyustVNnvrzF8Zg== dependencies: "@csstools/selector-resolve-nested" "^1.1.0" - "@csstools/selector-specificity" "^3.0.3" + "@csstools/selector-specificity" "^3.1.1" postcss-selector-parser "^6.0.13" postcss-normalize-charset@^6.0.2: @@ -4466,11 +4449,11 @@ postcss-place@^9.0.1: postcss-value-parser "^4.2.0" postcss-preset-env@^9.5.9: - version "9.5.11" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-9.5.11.tgz#ffb824b75987bbab647a8e1e3590c9ea904fb35c" - integrity sha512-rPFnftk1vQAaR45UmsuXhKd/IZrTj39dIc4usu8qbfxyNevHnG+FB8E50U7vs0v2OxBqBt5u0J5+cwb4newzGA== + version "9.5.13" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-9.5.13.tgz#7dfab9cbcc35044fd7a0465f87f643249a66cf31" + integrity sha512-YQMwWu6MAc4Envrjf/mW2BTrb5J8WkrJ4dV2VostZVDhrmEPpYREOyhmvtlFLDxK1/AmTDY8aXjZViMC1qKu/w== dependencies: - "@csstools/postcss-cascade-layers" "^4.0.4" + "@csstools/postcss-cascade-layers" "^4.0.6" "@csstools/postcss-color-function" "^3.0.16" "@csstools/postcss-color-mix-function" "^2.0.16" "@csstools/postcss-exponential-functions" "^1.0.7" @@ -4480,7 +4463,7 @@ postcss-preset-env@^9.5.9: "@csstools/postcss-hwb-function" "^3.0.15" "@csstools/postcss-ic-unit" "^3.0.6" "@csstools/postcss-initial" "^1.0.1" - "@csstools/postcss-is-pseudo-class" "^4.0.6" + "@csstools/postcss-is-pseudo-class" "^4.0.8" "@csstools/postcss-light-dark-function" "^1.0.5" "@csstools/postcss-logical-float-and-clear" "^2.0.1" "@csstools/postcss-logical-overflow" "^1.0.1" @@ -4502,7 +4485,7 @@ postcss-preset-env@^9.5.9: autoprefixer "^10.4.19" browserslist "^4.22.3" css-blank-pseudo "^6.0.2" - css-has-pseudo "^6.0.3" + css-has-pseudo "^6.0.5" css-prefers-color-scheme "^9.0.1" cssdb "^8.0.0" postcss-attribute-case-insensitive "^6.0.3" @@ -4522,7 +4505,7 @@ postcss-preset-env@^9.5.9: postcss-image-set-function "^6.0.3" postcss-lab-function "^6.0.16" postcss-logical "^7.0.1" - postcss-nesting "^12.1.2" + postcss-nesting "^12.1.4" postcss-opacity-percentage "^2.0.0" postcss-overflow-shorthand "^5.0.1" postcss-page-break "^3.0.4" @@ -4942,9 +4925,9 @@ safe-regex-test@^1.0.3: is-regex "^1.1.4" sass@^1.75.0: - version "1.76.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.76.0.tgz#fe15909500735ac154f0dc7386d656b62b03987d" - integrity sha512-nc3LeqvF2FNW5xGF1zxZifdW3ffIz5aBb7I7tSvOoNu7z1RQ6pFt9MBuiPtjgaI62YWrM/txjWlOCFiGtf2xpw== + version "1.77.1" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.1.tgz#018cdfb206afd14724030c02e9fefd8f30a76cd0" + integrity sha512-OMEyfirt9XEfyvocduUIOlUSkWOXS/LAt6oblR/ISXCTukyavjex+zQNm51pPCOiFKY1QpWvEH1EeCkgyV3I6w== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -4973,11 +4956,9 @@ semver@^6.3.1: integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.5.4, semver@^7.6.0: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" + version "7.6.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" + integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== serialize-javascript@^6.0.1: version "6.0.2" @@ -5158,9 +5139,9 @@ supports-preserve-symlinks-flag@^1.0.0: integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== svgo@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.2.0.tgz#7a5dff2938d8c6096e00295c2390e8e652fa805d" - integrity sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ== + version "3.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8" + integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== dependencies: "@trysound/sax" "0.2.0" commander "^7.2.0" @@ -5335,12 +5316,12 @@ unicode-property-aliases-ecmascript@^2.0.0: integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== update-browserslist-db@^1.0.13: - version "1.0.15" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz#60ed9f8cba4a728b7ecf7356f641a31e3a691d97" - integrity sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA== + version "1.0.16" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz#f6d489ed90fb2f07d67784eb3f53d7891f736356" + integrity sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ== dependencies: escalade "^3.1.2" - picocolors "^1.0.0" + picocolors "^1.0.1" uri-js@^4.2.2, uri-js@^4.4.1: version "4.4.1" @@ -5490,11 +5471,6 @@ yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - yaml-loader@^0.8.0: version "0.8.1" resolved "https://registry.yarnpkg.com/yaml-loader/-/yaml-loader-0.8.1.tgz#034f901147073cfc307cdcce8bd44c1547e60ba1"