pleroma/app/soapbox/features/ui/util/pending_status_builder.js

50 lines
1.7 KiB
JavaScript
Raw Normal View History

2021-10-09 14:56:03 -07:00
import { fromJS } from 'immutable';
import {
OrderedSet as ImmutableOrderedSet,
Map as ImmutableMap,
List as ImmutableList,
} from 'immutable';
2022-02-19 23:27:29 -08:00
import { normalizeStatus } from 'soapbox/normalizers/status';
2022-02-21 00:56:31 -08:00
import { calculateStatus } from 'soapbox/reducers/statuses';
import { makeGetAccount, makeGetStatus } from 'soapbox/selectors';
2021-10-09 14:56:03 -07:00
export const buildStatus = (state, pendingStatus, idempotencyKey) => {
const getAccount = makeGetAccount();
const getStatus = makeGetStatus();
2021-10-09 14:56:03 -07:00
const me = state.get('me');
const account = getAccount(state, me);
let mentions;
if (pendingStatus.get('in_reply_to_id')) {
const inReplyTo = getStatus(state, { id: pendingStatus.get('in_reply_to_id') });
if (inReplyTo.getIn(['account', 'id']) === me) {
2022-02-19 22:13:30 -08:00
mentions = ImmutableOrderedSet([account.get('acct')]).union(pendingStatus.get('to') || []);
} else {
mentions = pendingStatus.get('to', []);
}
2022-02-21 00:56:31 -08:00
mentions = mentions.toList().map(mention => ImmutableMap({
username: mention.split('@')[0],
2022-02-21 00:56:31 -08:00
acct: mention,
}));
}
2022-02-19 23:27:29 -08:00
const status = {
2021-10-09 14:56:03 -07:00
account,
content: pendingStatus.get('status', '').replace(new RegExp('\n', 'g'), '<br>'), /* eslint-disable-line no-control-regex */
id: `末pending-${idempotencyKey}`,
2021-10-09 14:56:03 -07:00
in_reply_to_id: pendingStatus.get('in_reply_to_id'),
media_attachments: pendingStatus.get('media_ids', ImmutableList()).map(id => ImmutableMap({ id })),
mentions,
2021-10-09 14:56:03 -07:00
poll: pendingStatus.get('poll', null),
quote: pendingStatus.get('quote_id', null),
2021-10-09 14:56:03 -07:00
sensitive: pendingStatus.get('sensitive', false),
visibility: pendingStatus.get('visibility', 'public'),
2022-02-19 23:27:29 -08:00
};
2021-10-09 14:56:03 -07:00
2022-02-21 00:56:31 -08:00
return calculateStatus(normalizeStatus(fromJS(status)));
2021-10-09 14:56:03 -07:00
};