* Add: #699 引用・参照対応サーバーをAPIで取得 * Complete * ごめん
This commit is contained in:
parent
78b2707c08
commit
1c054ed3a3
22 changed files with 129 additions and 29 deletions
|
@ -31,6 +31,13 @@ export interface ApiAccountOtherSettingsJSON {
|
|||
subscription_policy: 'allow' | 'followers_only' | 'block';
|
||||
}
|
||||
|
||||
export interface ApiServerFeaturesJSON {
|
||||
circle: boolean;
|
||||
emoji_reaction: boolean;
|
||||
quote: boolean;
|
||||
status_reference: boolean;
|
||||
}
|
||||
|
||||
// See app/serializers/rest/account_serializer.rb
|
||||
export interface ApiAccountJSON {
|
||||
acct: string;
|
||||
|
@ -56,6 +63,7 @@ export interface ApiAccountJSON {
|
|||
note: string;
|
||||
other_settings: ApiAccountOtherSettingsJSON;
|
||||
roles?: ApiAccountJSON[];
|
||||
server_features: ApiServerFeaturesJSON;
|
||||
subscribable: boolean;
|
||||
statuses_count: number;
|
||||
uri: string;
|
||||
|
|
|
@ -606,7 +606,7 @@ class Status extends ImmutablePureComponent {
|
|||
let emojiReactionsBar = null;
|
||||
if (!this.props.withoutEmojiReactions && status.get('emoji_reactions')) {
|
||||
const emojiReactions = status.get('emoji_reactions');
|
||||
const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || status.getIn(['account', 'emoji_reaction_available_server']);
|
||||
const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || status.getIn(['account', 'server_features', 'emoji_reaction']);
|
||||
if (emojiReactions.size > 0 && enableEmojiReaction && emojiReactionAvailableServer) {
|
||||
emojiReactionsBar = <StatusEmojiReactionsBar emojiReactions={emojiReactions} myReactionOnly={!isShowItem('emoji_reaction_on_timeline')} status={status} onEmojiReact={this.props.onEmojiReact} onUnEmojiReact={this.props.onUnEmojiReact} />;
|
||||
}
|
||||
|
|
|
@ -350,11 +350,13 @@ class StatusActionBar extends ImmutablePureComponent {
|
|||
menu.push({ text: intl.formatMessage(status.get('reblogged') ? messages.cancelReblog : messages.reblog), action: this.handleReblogForceModalClick, tag: 'reblog' });
|
||||
|
||||
if (publicStatus) {
|
||||
if (allowQuote) {
|
||||
if (allowQuote && (account.getIn(['server_features', 'quote']) || !isHideItem('quote_unavailable_server'))) {
|
||||
menu.push({ text: intl.formatMessage(messages.quote), action: this.handleQuote, tag: 'reblog' });
|
||||
}
|
||||
|
||||
menu.push({ text: intl.formatMessage(messages.reference), action: this.handleReference, tag: 'reblog' });
|
||||
if (account.getIn(['server_features', 'status_reference']) || !isHideItem('status_reference_unavailable_server')) {
|
||||
menu.push({ text: intl.formatMessage(messages.reference), action: this.handleReference, tag: 'reblog' });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -439,11 +441,13 @@ class StatusActionBar extends ImmutablePureComponent {
|
|||
}
|
||||
|
||||
if (publicStatus) {
|
||||
if (allowQuote) {
|
||||
if (allowQuote && (account.getIn(['server_features', 'quote']) || !isHideItem('quote_unavailable_server'))) {
|
||||
reblogMenu.push({ text: intl.formatMessage(messages.quote), action: this.handleQuote });
|
||||
}
|
||||
|
||||
reblogMenu.push({ text: intl.formatMessage(messages.reference), action: this.handleReference });
|
||||
if (account.getIn(['server_features', 'status_reference']) || !isHideItem('status_reference_unavailable_server')) {
|
||||
reblogMenu.push({ text: intl.formatMessage(messages.reference), action: this.handleReference });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -485,7 +489,7 @@ class StatusActionBar extends ImmutablePureComponent {
|
|||
<IconButton className='status__action-bar__button' title={intl.formatMessage(messages.hide)} icon='eye' iconComponent={VisibilityIcon} onClick={this.handleHideClick} />
|
||||
);
|
||||
|
||||
const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || account.get('emoji_reaction_available_server');
|
||||
const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || account.getIn(['server_features', 'emoji_reaction']);
|
||||
const emojiReactionPolicy = account.getIn(['other_settings', 'emoji_reaction_policy']) || 'allow';
|
||||
const following = emojiReactionPolicy !== 'following_only' || (relationship && relationship.get('following'));
|
||||
const followed = emojiReactionPolicy !== 'followers_only' || (relationship && relationship.get('followed_by'));
|
||||
|
|
|
@ -277,11 +277,13 @@ class ActionBar extends PureComponent {
|
|||
menu.push({ text: intl.formatMessage(status.get('reblogged') ? messages.cancel_reblog : messages.reblog), action: this.handleReblogForceModalClick, tag: 'reblog' });
|
||||
|
||||
if (publicStatus) {
|
||||
if (allowQuote) {
|
||||
if (allowQuote && (account.getIn(['server_features', 'quote']) || !isHideItem('quote_unavailable_server'))) {
|
||||
menu.push({ text: intl.formatMessage(messages.quote), action: this.handleQuote, tag: 'reblog' });
|
||||
}
|
||||
|
||||
menu.push({ text: intl.formatMessage(messages.reference), action: this.handleReference, tag: 'reblog' });
|
||||
if (account.getIn(['server_features', 'status_reference']) || !isHideItem('status_reference_unavailable_server')) {
|
||||
menu.push({ text: intl.formatMessage(messages.reference), action: this.handleReference, tag: 'reblog' });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -356,11 +358,13 @@ class ActionBar extends PureComponent {
|
|||
}
|
||||
|
||||
if (publicStatus) {
|
||||
if (allowQuote) {
|
||||
if (allowQuote && (account.getIn(['server_features', 'quote']) || !isHideItem('quote_unavailable_server'))) {
|
||||
reblogMenu.push({ text: intl.formatMessage(messages.quote), action: this.handleQuote });
|
||||
}
|
||||
|
||||
reblogMenu.push({ text: intl.formatMessage(messages.reference), action: this.handleReference });
|
||||
if (account.getIn(['server_features', 'status_reference']) || !isHideItem('status_reference_unavailable_server')) {
|
||||
reblogMenu.push({ text: intl.formatMessage(messages.reference), action: this.handleReference });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -395,7 +399,7 @@ class ActionBar extends PureComponent {
|
|||
reblogMenu = [];
|
||||
}
|
||||
|
||||
const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || account.get('emoji_reaction_available_server');
|
||||
const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || account.getIn(['server_features', 'emoji_reaction']);
|
||||
const emojiReactionPolicy = account.getIn(['other_settings', 'emoji_reaction_policy']) || 'allow';
|
||||
const following = emojiReactionPolicy !== 'following_only' || (relationship && relationship.get('following'));
|
||||
const followed = emojiReactionPolicy !== 'followers_only' || (relationship && relationship.get('followed_by'));
|
||||
|
|
|
@ -222,7 +222,7 @@ class DetailedStatus extends ImmutablePureComponent {
|
|||
}
|
||||
|
||||
let emojiReactionsBar = null;
|
||||
const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || status.getIn(['account', 'emoji_reaction_available_server']);
|
||||
const emojiReactionAvailableServer = !isHideItem('emoji_reaction_unavailable_server') || status.getIn(['account', 'server_features', 'emoji_reaction']);
|
||||
if (status.get('emoji_reactions')) {
|
||||
const emojiReactions = status.get('emoji_reactions');
|
||||
if (emojiReactions.size > 0 && enableEmojiReaction && emojiReactionAvailableServer) {
|
||||
|
|
|
@ -9,8 +9,10 @@
|
|||
* | 'favourite_menu'
|
||||
* | 'quote_in_home'
|
||||
* | 'quote_in_public'
|
||||
* | 'quote_unavailable_server'
|
||||
* | 'recent_emojis'
|
||||
* | 'relationships'
|
||||
* | 'status_reference_unavailable_server'
|
||||
* } HideItemsDefinition
|
||||
*/
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ import type {
|
|||
ApiAccountRoleJSON,
|
||||
ApiAccountOtherSettingsJSON,
|
||||
ApiAccountJSON,
|
||||
ApiServerFeaturesJSON,
|
||||
} from 'mastodon/api_types/accounts';
|
||||
import type { ApiCustomEmojiJSON } from 'mastodon/api_types/custom_emoji';
|
||||
import emojify from 'mastodon/features/emoji/emoji';
|
||||
|
@ -61,6 +62,18 @@ const AccountOtherSettingsFactory = ImmutableRecord<AccountOtherSettingsShape>({
|
|||
subscription_policy: 'allow',
|
||||
});
|
||||
|
||||
// ServerFeatures
|
||||
export type AccountServerFeaturesShape = ApiServerFeaturesJSON;
|
||||
export type AccountServerFeatures = RecordOf<AccountServerFeaturesShape>;
|
||||
|
||||
const AccountServerFeaturesFactory =
|
||||
ImmutableRecord<AccountServerFeaturesShape>({
|
||||
circle: false,
|
||||
emoji_reaction: false,
|
||||
quote: false,
|
||||
status_reference: false,
|
||||
});
|
||||
|
||||
// Account
|
||||
export interface AccountShape
|
||||
extends Required<
|
||||
|
@ -88,6 +101,7 @@ export const accountDefaultValues: AccountShape = {
|
|||
indexable: false,
|
||||
display_name: '',
|
||||
display_name_html: '',
|
||||
server_features: AccountServerFeaturesFactory(),
|
||||
emoji_reaction_available_server: false,
|
||||
emojis: List<CustomEmoji>(),
|
||||
fields: List<AccountField>(),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue