UX: redesign admin permalinks page (#29634)

Redesign the permalinks page to follow the UX guide. In addition, the ability to edit permalinks was added.

This change includes:
- move to RestModel
- added Validations
- update endpoint and clear old values after the update
- system specs and improvements for unit tests
This commit is contained in:
Krzysztof Kotlarek
2024-11-14 10:03:58 +11:00
committed by GitHub
parent b37f6f1edb
commit 42b1ca8f78
29 changed files with 924 additions and 239 deletions

View File

@ -1,7 +1,7 @@
# frozen_string_literal: true
class Admin::PermalinksController < Admin::AdminController
before_action :fetch_permalink, only: [:destroy]
before_action :fetch_permalink, only: %i[show update destroy]
def index
url = params[:filter]
@ -9,23 +9,38 @@ class Admin::PermalinksController < Admin::AdminController
render_serialized(permalinks, PermalinkSerializer)
end
def new
end
def edit
end
def show
render_serialized(@permalink, PermalinkSerializer)
end
def create
params.require(:url)
params.require(:permalink_type)
params.require(:permalink_type_value)
if params[:permalink_type] == "tag_name"
params[:permalink_type] = "tag_id"
params[:permalink_type_value] = Tag.find_by_name(params[:permalink_type_value])&.id
end
permalink =
Permalink.new(:url => params[:url], params[:permalink_type] => params[:permalink_type_value])
if permalink.save
render_serialized(permalink, PermalinkSerializer)
else
render_json_error(permalink)
end
Permalink.create!(
url: permalink_params[:url],
permalink_type: permalink_params[:permalink_type],
permalink_type_value: permalink_params[:permalink_type_value],
)
render_serialized(permalink, PermalinkSerializer)
rescue ActiveRecord::RecordInvalid => e
render_json_error(e.record.errors.full_messages)
end
def update
@permalink.update!(
url: permalink_params[:url],
permalink_type: permalink_params[:permalink_type],
permalink_type_value: permalink_params[:permalink_type_value],
)
render_serialized(@permalink, PermalinkSerializer)
rescue ActiveRecord::RecordInvalid => e
render_json_error(e.record.errors.full_messages)
end
def destroy
@ -38,4 +53,8 @@ class Admin::PermalinksController < Admin::AdminController
def fetch_permalink
@permalink = Permalink.find(params[:id])
end
def permalink_params
params.require(:permalink).permit(:url, :permalink_type, :permalink_type_value)
end
end