diff --git a/app/controllers/api/v1/antennas_controller.rb b/app/controllers/api/v1/antennas_controller.rb index 37bfb7f552..11610e42c4 100644 --- a/app/controllers/api/v1/antennas_controller.rb +++ b/app/controllers/api/v1/antennas_controller.rb @@ -42,6 +42,6 @@ class Api::V1::AntennasController < Api::BaseController end def antenna_params - params.permit(:title, :list_id, :insert_feeds, :stl, :ltl, :with_media_only, :ignore_reblog) + params.permit(:title, :list_id, :insert_feeds, :stl, :ltl, :with_media_only, :ignore_reblog, :favourite) end end diff --git a/app/controllers/api/v1/lists_controller.rb b/app/controllers/api/v1/lists_controller.rb index 0bacd7fdb0..2086bf116d 100644 --- a/app/controllers/api/v1/lists_controller.rb +++ b/app/controllers/api/v1/lists_controller.rb @@ -38,6 +38,16 @@ class Api::V1::ListsController < Api::BaseController render_empty end + def favourite + @list.favourite! + render json: @list, serializer: REST::ListSerializer + end + + def unfavourite + @list.unfavourite! + render json: @list, serializer: REST::ListSerializer + end + private def set_list @@ -45,6 +55,6 @@ class Api::V1::ListsController < Api::BaseController end def list_params - params.permit(:title, :replies_policy, :exclusive, :notify) + params.permit(:title, :replies_policy, :exclusive, :notify, :favourite) end end diff --git a/app/helpers/kmyblue_capabilities_helper.rb b/app/helpers/kmyblue_capabilities_helper.rb index 075869ee60..279505bec8 100644 --- a/app/helpers/kmyblue_capabilities_helper.rb +++ b/app/helpers/kmyblue_capabilities_helper.rb @@ -20,6 +20,8 @@ module KmyblueCapabilitiesHelper kmyblue_circle_history kmyblue_list_notification kmyblue_server_features + favourite_list + kmyblue_favourite_antenna ) capabilities << :full_text_search if Chewy.enabled? diff --git a/app/javascript/mastodon/api_types/antennas.ts b/app/javascript/mastodon/api_types/antennas.ts index 75a8835276..a2a8a997ba 100644 --- a/app/javascript/mastodon/api_types/antennas.ts +++ b/app/javascript/mastodon/api_types/antennas.ts @@ -10,6 +10,7 @@ export interface ApiAntennaJSON { insert_feeds: boolean; with_media_only: boolean; ignore_reblog: boolean; + favourite: boolean; list: ApiListJSON | null; list_id: string | undefined; diff --git a/app/javascript/mastodon/api_types/lists.ts b/app/javascript/mastodon/api_types/lists.ts index d7a8247bbe..bc32b33883 100644 --- a/app/javascript/mastodon/api_types/lists.ts +++ b/app/javascript/mastodon/api_types/lists.ts @@ -10,5 +10,6 @@ export interface ApiListJSON { exclusive: boolean; replies_policy: RepliesPolicyType; notify: boolean; + favourite: boolean; antennas?: ApiAntennaJSON[]; } diff --git a/app/javascript/mastodon/features/antennas/new.tsx b/app/javascript/mastodon/features/antennas/new.tsx index 0936768c14..9a1fa0188d 100644 --- a/app/javascript/mastodon/features/antennas/new.tsx +++ b/app/javascript/mastodon/features/antennas/new.tsx @@ -62,6 +62,7 @@ const NewAntenna: React.FC<{ const [ignoreReblog, setIgnoreReblog] = useState(false); const [mode, setMode] = useState('filtering'); const [destination, setDestination] = useState('timeline'); + const [favourite, setFavourite] = useState(true); const [submitting, setSubmitting] = useState(false); useEffect(() => { @@ -80,6 +81,7 @@ const NewAntenna: React.FC<{ setListId(antenna.list?.id ?? '0'); setWithMediaOnly(antenna.with_media_only); setIgnoreReblog(antenna.ignore_reblog); + setFavourite(antenna.favourite); if (antenna.stl) { setMode('stl'); @@ -109,6 +111,7 @@ const NewAntenna: React.FC<{ setIgnoreReblog, setMode, setDestination, + setFavourite, id, antenna, lists, @@ -179,6 +182,13 @@ const NewAntenna: React.FC<{ [setIgnoreReblog], ); + const handleFavouriteChange = useCallback( + ({ target: { checked } }: React.ChangeEvent) => { + setFavourite(checked); + }, + [setFavourite], + ); + const handleSubmit = useCallback(() => { setSubmitting(true); @@ -193,6 +203,7 @@ const NewAntenna: React.FC<{ list_id: destination === 'list' ? listId : '0', with_media_only: withMediaOnly, ignore_reblog: ignoreReblog, + favourite, }), ).then(() => { setSubmitting(false); @@ -208,6 +219,7 @@ const NewAntenna: React.FC<{ list_id: destination === 'list' ? listId : '0', with_media_only: withMediaOnly, ignore_reblog: ignoreReblog, + favourite, }), ).then((result) => { setSubmitting(false); @@ -233,6 +245,7 @@ const NewAntenna: React.FC<{ withMediaOnly, ignoreReblog, destination, + favourite, ]); return ( @@ -460,6 +473,35 @@ const NewAntenna: React.FC<{ )} +
+ {/* eslint-disable-next-line jsx-a11y/label-has-associated-control */} + +
+
+
+ {/* eslint-disable-next-line jsx-a11y/label-has-associated-control */} + +
+