gearheads
/
mastodon
Archived
2
0
Fork 0

refactor: Rewrite immutablejs import statements using destructuring (#4147)

gh/stable
Sorin Davidoi 2017-07-11 01:00:14 +02:00 committed by Eugen Rochko
parent 7bacdd718a
commit cc68d1945b
28 changed files with 141 additions and 141 deletions

View File

@ -1,5 +1,5 @@
import api, { getLinks } from '../api'; import api, { getLinks } from '../api';
import Immutable from 'immutable'; import { List as ImmutableList } from 'immutable';
import IntlMessageFormat from 'intl-messageformat'; import IntlMessageFormat from 'intl-messageformat';
import { fetchRelationships } from './accounts'; import { fetchRelationships } from './accounts';
import { defineMessages } from 'react-intl'; import { defineMessages } from 'react-intl';
@ -124,7 +124,7 @@ export function refreshNotificationsFail(error, skipLoading) {
export function expandNotifications() { export function expandNotifications() {
return (dispatch, getState) => { return (dispatch, getState) => {
const items = getState().getIn(['notifications', 'items'], Immutable.List()); const items = getState().getIn(['notifications', 'items'], ImmutableList());
if (getState().getIn(['notifications', 'isLoading']) || items.size === 0) { if (getState().getIn(['notifications', 'isLoading']) || items.size === 0) {
return; return;

View File

@ -1,11 +1,11 @@
import Immutable from 'immutable'; import { Iterable, fromJS } from 'immutable';
export const STORE_HYDRATE = 'STORE_HYDRATE'; export const STORE_HYDRATE = 'STORE_HYDRATE';
export const STORE_HYDRATE_LAZY = 'STORE_HYDRATE_LAZY'; export const STORE_HYDRATE_LAZY = 'STORE_HYDRATE_LAZY';
const convertState = rawState => const convertState = rawState =>
Immutable.fromJS(rawState, (k, v) => fromJS(rawState, (k, v) =>
Immutable.Iterable.isIndexed(v) ? v.toList() : v.toMap().mapKeys(x => Iterable.isIndexed(v) ? v.toList() : v.toMap().mapKeys(x =>
Number.isNaN(x * 1) ? x : x * 1)); Number.isNaN(x * 1) ? x : x * 1));
export function hydrateStore(rawState) { export function hydrateStore(rawState) {

View File

@ -1,5 +1,5 @@
import api, { getLinks } from '../api'; import api, { getLinks } from '../api';
import Immutable from 'immutable'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
export const TIMELINE_UPDATE = 'TIMELINE_UPDATE'; export const TIMELINE_UPDATE = 'TIMELINE_UPDATE';
export const TIMELINE_DELETE = 'TIMELINE_DELETE'; export const TIMELINE_DELETE = 'TIMELINE_DELETE';
@ -66,13 +66,13 @@ export function refreshTimelineRequest(timeline, skipLoading) {
export function refreshTimeline(timelineId, path, params = {}) { export function refreshTimeline(timelineId, path, params = {}) {
return function (dispatch, getState) { return function (dispatch, getState) {
const timeline = getState().getIn(['timelines', timelineId], Immutable.Map()); const timeline = getState().getIn(['timelines', timelineId], ImmutableMap());
if (timeline.get('isLoading') || timeline.get('online')) { if (timeline.get('isLoading') || timeline.get('online')) {
return; return;
} }
const ids = timeline.get('items', Immutable.List()); const ids = timeline.get('items', ImmutableList());
const newestId = ids.size > 0 ? ids.first() : null; const newestId = ids.size > 0 ? ids.first() : null;
let skipLoading = timeline.get('loaded'); let skipLoading = timeline.get('loaded');
@ -111,8 +111,8 @@ export function refreshTimelineFail(timeline, error, skipLoading) {
export function expandTimeline(timelineId, path, params = {}) { export function expandTimeline(timelineId, path, params = {}) {
return (dispatch, getState) => { return (dispatch, getState) => {
const timeline = getState().getIn(['timelines', timelineId], Immutable.Map()); const timeline = getState().getIn(['timelines', timelineId], ImmutableMap());
const ids = timeline.get('items', Immutable.List()); const ids = timeline.get('items', ImmutableList());
if (timeline.get('isLoading') || ids.size === 0) { if (timeline.get('isLoading') || ids.size === 0) {
return; return;

View File

@ -9,11 +9,11 @@ import LoadingIndicator from '../../components/loading_indicator';
import Column from '../ui/components/column'; import Column from '../ui/components/column';
import HeaderContainer from './containers/header_container'; import HeaderContainer from './containers/header_container';
import ColumnBackButton from '../../components/column_back_button'; import ColumnBackButton from '../../components/column_back_button';
import Immutable from 'immutable'; import { List as ImmutableList } from 'immutable';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
const mapStateToProps = (state, props) => ({ const mapStateToProps = (state, props) => ({
statusIds: state.getIn(['timelines', `account:${Number(props.params.accountId)}`, 'items'], Immutable.List()), statusIds: state.getIn(['timelines', `account:${Number(props.params.accountId)}`, 'items'], ImmutableList()),
isLoading: state.getIn(['timelines', `account:${Number(props.params.accountId)}`, 'isLoading']), isLoading: state.getIn(['timelines', `account:${Number(props.params.accountId)}`, 'isLoading']),
hasMore: !!state.getIn(['timelines', `account:${Number(props.params.accountId)}`, 'next']), hasMore: !!state.getIn(['timelines', `account:${Number(props.params.accountId)}`, 'next']),
me: state.getIn(['meta', 'me']), me: state.getIn(['meta', 'me']),

View File

@ -11,7 +11,7 @@ import { ScrollContainer } from 'react-router-scroll';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import ColumnSettingsContainer from './containers/column_settings_container'; import ColumnSettingsContainer from './containers/column_settings_container';
import { createSelector } from 'reselect'; import { createSelector } from 'reselect';
import Immutable from 'immutable'; import { List as ImmutableList } from 'immutable';
import LoadMore from '../../components/load_more'; import LoadMore from '../../components/load_more';
import { debounce } from 'lodash'; import { debounce } from 'lodash';
@ -20,7 +20,7 @@ const messages = defineMessages({
}); });
const getNotifications = createSelector([ const getNotifications = createSelector([
state => Immutable.List(state.getIn(['settings', 'notifications', 'shows']).filter(item => !item).keys()), state => ImmutableList(state.getIn(['settings', 'notifications', 'shows']).filter(item => !item).keys()),
state => state.getIn(['notifications', 'items']), state => state.getIn(['notifications', 'items']),
], (excludedTypes, notifications) => notifications.filterNot(item => excludedTypes.includes(item.get('type')))); ], (excludedTypes, notifications) => notifications.filterNot(item => excludedTypes.includes(item.get('type'))));

View File

@ -1,11 +1,11 @@
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import StatusCheckBox from '../components/status_check_box'; import StatusCheckBox from '../components/status_check_box';
import { toggleStatusReport } from '../../../actions/reports'; import { toggleStatusReport } from '../../../actions/reports';
import Immutable from 'immutable'; import { Set as ImmutableSet } from 'immutable';
const mapStateToProps = (state, { id }) => ({ const mapStateToProps = (state, { id }) => ({
status: state.getIn(['statuses', id]), status: state.getIn(['statuses', id]),
checked: state.getIn(['reports', 'new', 'status_ids'], Immutable.Set()).includes(id), checked: state.getIn(['reports', 'new', 'status_ids'], ImmutableSet()).includes(id),
}); });
const mapDispatchToProps = (dispatch, { id }) => ({ const mapDispatchToProps = (dispatch, { id }) => ({

View File

@ -10,7 +10,7 @@ import ComposeForm from '../../compose/components/compose_form';
import Search from '../../compose/components/search'; import Search from '../../compose/components/search';
import NavigationBar from '../../compose/components/navigation_bar'; import NavigationBar from '../../compose/components/navigation_bar';
import ColumnHeader from './column_header'; import ColumnHeader from './column_header';
import Immutable from 'immutable'; import { List as ImmutableList } from 'immutable';
const noop = () => { }; const noop = () => { };
@ -48,7 +48,7 @@ const PageTwo = ({ me }) => (
</div> </div>
<ComposeForm <ComposeForm
text='Awoo! #introductions' text='Awoo! #introductions'
suggestions={Immutable.List()} suggestions={ImmutableList()}
mentionedDomains={[]} mentionedDomains={[]}
spoiler={false} spoiler={false}
onChange={noop} onChange={noop}

View File

@ -7,7 +7,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import { makeGetAccount } from '../../../selectors'; import { makeGetAccount } from '../../../selectors';
import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; import { defineMessages, FormattedMessage, injectIntl } from 'react-intl';
import StatusCheckBox from '../../report/containers/status_check_box_container'; import StatusCheckBox from '../../report/containers/status_check_box_container';
import Immutable from 'immutable'; import { OrderedSet } from 'immutable';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
import Button from '../../../components/button'; import Button from '../../../components/button';
@ -26,7 +26,7 @@ const makeMapStateToProps = () => {
isSubmitting: state.getIn(['reports', 'new', 'isSubmitting']), isSubmitting: state.getIn(['reports', 'new', 'isSubmitting']),
account: getAccount(state, accountId), account: getAccount(state, accountId),
comment: state.getIn(['reports', 'new', 'comment']), comment: state.getIn(['reports', 'new', 'comment']),
statusIds: Immutable.OrderedSet(state.getIn(['timelines', `account:${accountId}`, 'items'])).union(state.getIn(['reports', 'new', 'status_ids'])), statusIds: OrderedSet(state.getIn(['timelines', `account:${accountId}`, 'items'])).union(state.getIn(['reports', 'new', 'status_ids'])),
}; };
}; };

View File

@ -1,13 +1,13 @@
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import StatusList from '../../../components/status_list'; import StatusList from '../../../components/status_list';
import { scrollTopTimeline } from '../../../actions/timelines'; import { scrollTopTimeline } from '../../../actions/timelines';
import Immutable from 'immutable'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
import { createSelector } from 'reselect'; import { createSelector } from 'reselect';
import { debounce } from 'lodash'; import { debounce } from 'lodash';
const makeGetStatusIds = () => createSelector([ const makeGetStatusIds = () => createSelector([
(state, { type }) => state.getIn(['settings', type], Immutable.Map()), (state, { type }) => state.getIn(['settings', type], ImmutableMap()),
(state, { type }) => state.getIn(['timelines', type, 'items'], Immutable.List()), (state, { type }) => state.getIn(['timelines', type, 'items'], ImmutableList()),
(state) => state.get('statuses'), (state) => state.get('statuses'),
(state) => state.getIn(['meta', 'me']), (state) => state.getIn(['meta', 'me']),
], (columnSettings, statusIds, statuses, me) => statusIds.filter(id => { ], (columnSettings, statusIds, statuses, me) => statusIds.filter(id => {

View File

@ -44,7 +44,7 @@ import {
FAVOURITED_STATUSES_EXPAND_SUCCESS, FAVOURITED_STATUSES_EXPAND_SUCCESS,
} from '../actions/favourites'; } from '../actions/favourites';
import { STORE_HYDRATE } from '../actions/store'; import { STORE_HYDRATE } from '../actions/store';
import Immutable from 'immutable'; import { Map as ImmutableMap, fromJS } from 'immutable';
const normalizeAccount = (state, account) => { const normalizeAccount = (state, account) => {
account = { ...account }; account = { ...account };
@ -53,7 +53,7 @@ const normalizeAccount = (state, account) => {
delete account.following_count; delete account.following_count;
delete account.statuses_count; delete account.statuses_count;
return state.set(account.id, Immutable.fromJS(account)); return state.set(account.id, fromJS(account));
}; };
const normalizeAccounts = (state, accounts) => { const normalizeAccounts = (state, accounts) => {
@ -82,7 +82,7 @@ const normalizeAccountsFromStatuses = (state, statuses) => {
return state; return state;
}; };
const initialState = Immutable.Map(); const initialState = ImmutableMap();
export default function accounts(state = initialState, action) { export default function accounts(state = initialState, action) {
switch(action.type) { switch(action.type) {

View File

@ -46,9 +46,9 @@ import {
FAVOURITED_STATUSES_EXPAND_SUCCESS, FAVOURITED_STATUSES_EXPAND_SUCCESS,
} from '../actions/favourites'; } from '../actions/favourites';
import { STORE_HYDRATE } from '../actions/store'; import { STORE_HYDRATE } from '../actions/store';
import Immutable from 'immutable'; import { Map as ImmutableMap, fromJS } from 'immutable';
const normalizeAccount = (state, account) => state.set(account.id, Immutable.fromJS({ const normalizeAccount = (state, account) => state.set(account.id, fromJS({
followers_count: account.followers_count, followers_count: account.followers_count,
following_count: account.following_count, following_count: account.following_count,
statuses_count: account.statuses_count, statuses_count: account.statuses_count,
@ -80,12 +80,12 @@ const normalizeAccountsFromStatuses = (state, statuses) => {
return state; return state;
}; };
const initialState = Immutable.Map(); const initialState = ImmutableMap();
export default function accountsCounters(state = initialState, action) { export default function accountsCounters(state = initialState, action) {
switch(action.type) { switch(action.type) {
case STORE_HYDRATE: case STORE_HYDRATE:
return state.merge(action.state.get('accounts').map(item => Immutable.fromJS({ return state.merge(action.state.get('accounts').map(item => fromJS({
followers_count: item.get('followers_count'), followers_count: item.get('followers_count'),
following_count: item.get('following_count'), following_count: item.get('following_count'),
statuses_count: item.get('statuses_count'), statuses_count: item.get('statuses_count'),

View File

@ -3,14 +3,14 @@ import {
ALERT_DISMISS, ALERT_DISMISS,
ALERT_CLEAR, ALERT_CLEAR,
} from '../actions/alerts'; } from '../actions/alerts';
import Immutable from 'immutable'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
const initialState = Immutable.List([]); const initialState = ImmutableList([]);
export default function alerts(state = initialState, action) { export default function alerts(state = initialState, action) {
switch(action.type) { switch(action.type) {
case ALERT_SHOW: case ALERT_SHOW:
return state.push(Immutable.Map({ return state.push(ImmutableMap({
key: state.size > 0 ? state.last().get('key') + 1 : 0, key: state.size > 0 ? state.last().get('key') + 1 : 0,
title: action.title, title: action.title,
message: action.message, message: action.message,

View File

@ -1,13 +1,13 @@
import { STATUS_CARD_FETCH_SUCCESS } from '../actions/cards'; import { STATUS_CARD_FETCH_SUCCESS } from '../actions/cards';
import Immutable from 'immutable'; import { Map as ImmutableMap, fromJS } from 'immutable';
const initialState = Immutable.Map(); const initialState = ImmutableMap();
export default function cards(state = initialState, action) { export default function cards(state = initialState, action) {
switch(action.type) { switch(action.type) {
case STATUS_CARD_FETCH_SUCCESS: case STATUS_CARD_FETCH_SUCCESS:
return state.set(action.id, Immutable.fromJS(action.card)); return state.set(action.id, fromJS(action.card));
default: default:
return state; return state;
} }

View File

@ -24,10 +24,10 @@ import {
} from '../actions/compose'; } from '../actions/compose';
import { TIMELINE_DELETE } from '../actions/timelines'; import { TIMELINE_DELETE } from '../actions/timelines';
import { STORE_HYDRATE } from '../actions/store'; import { STORE_HYDRATE } from '../actions/store';
import Immutable from 'immutable'; import { Map as ImmutableMap, List as ImmutableList, OrderedSet as ImmutableOrderedSet, fromJS } from 'immutable';
import uuid from '../uuid'; import uuid from '../uuid';
const initialState = Immutable.Map({ const initialState = ImmutableMap({
mounted: false, mounted: false,
sensitive: false, sensitive: false,
spoiler: false, spoiler: false,
@ -40,9 +40,9 @@ const initialState = Immutable.Map({
is_submitting: false, is_submitting: false,
is_uploading: false, is_uploading: false,
progress: 0, progress: 0,
media_attachments: Immutable.List(), media_attachments: ImmutableList(),
suggestion_token: null, suggestion_token: null,
suggestions: Immutable.List(), suggestions: ImmutableList(),
me: null, me: null,
default_privacy: 'public', default_privacy: 'public',
default_sensitive: false, default_sensitive: false,
@ -51,7 +51,7 @@ const initialState = Immutable.Map({
}); });
function statusToTextMentions(state, status) { function statusToTextMentions(state, status) {
let set = Immutable.OrderedSet([]); let set = ImmutableOrderedSet([]);
let me = state.get('me'); let me = state.get('me');
if (status.getIn(['account', 'id']) !== me) { if (status.getIn(['account', 'id']) !== me) {
@ -111,7 +111,7 @@ const insertSuggestion = (state, position, token, completion) => {
return state.withMutations(map => { return state.withMutations(map => {
map.update('text', oldText => `${oldText.slice(0, position)}${completion} ${oldText.slice(position + token.length)}`); map.update('text', oldText => `${oldText.slice(0, position)}${completion} ${oldText.slice(position + token.length)}`);
map.set('suggestion_token', null); map.set('suggestion_token', null);
map.update('suggestions', Immutable.List(), list => list.clear()); map.update('suggestions', ImmutableList(), list => list.clear());
map.set('focusDate', new Date()); map.set('focusDate', new Date());
map.set('idempotencyKey', uuid()); map.set('idempotencyKey', uuid());
}); });
@ -206,7 +206,7 @@ export default function compose(state = initialState, action) {
map.set('is_uploading', true); map.set('is_uploading', true);
}); });
case COMPOSE_UPLOAD_SUCCESS: case COMPOSE_UPLOAD_SUCCESS:
return appendMedia(state, Immutable.fromJS(action.media)); return appendMedia(state, fromJS(action.media));
case COMPOSE_UPLOAD_FAIL: case COMPOSE_UPLOAD_FAIL:
return state.set('is_uploading', false); return state.set('is_uploading', false);
case COMPOSE_UPLOAD_UNDO: case COMPOSE_UPLOAD_UNDO:
@ -219,9 +219,9 @@ export default function compose(state = initialState, action) {
.set('focusDate', new Date()) .set('focusDate', new Date())
.set('idempotencyKey', uuid()); .set('idempotencyKey', uuid());
case COMPOSE_SUGGESTIONS_CLEAR: case COMPOSE_SUGGESTIONS_CLEAR:
return state.update('suggestions', Immutable.List(), list => list.clear()).set('suggestion_token', null); return state.update('suggestions', ImmutableList(), list => list.clear()).set('suggestion_token', null);
case COMPOSE_SUGGESTIONS_READY: case COMPOSE_SUGGESTIONS_READY:
return state.set('suggestions', Immutable.List(action.accounts.map(item => item.id))).set('suggestion_token', action.token); return state.set('suggestions', ImmutableList(action.accounts.map(item => item.id))).set('suggestion_token', action.token);
case COMPOSE_SUGGESTION_SELECT: case COMPOSE_SUGGESTION_SELECT:
return insertSuggestion(state, action.position, action.token, action.completion); return insertSuggestion(state, action.position, action.token, action.completion);
case TIMELINE_DELETE: case TIMELINE_DELETE:

View File

@ -1,10 +1,10 @@
import { CONTEXT_FETCH_SUCCESS } from '../actions/statuses'; import { CONTEXT_FETCH_SUCCESS } from '../actions/statuses';
import { TIMELINE_DELETE } from '../actions/timelines'; import { TIMELINE_DELETE } from '../actions/timelines';
import Immutable from 'immutable'; import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable';
const initialState = Immutable.Map({ const initialState = ImmutableMap({
ancestors: Immutable.Map(), ancestors: ImmutableMap(),
descendants: Immutable.Map(), descendants: ImmutableMap(),
}); });
const normalizeContext = (state, id, ancestors, descendants) => { const normalizeContext = (state, id, ancestors, descendants) => {
@ -18,12 +18,12 @@ const normalizeContext = (state, id, ancestors, descendants) => {
}; };
const deleteFromContexts = (state, id) => { const deleteFromContexts = (state, id) => {
state.getIn(['descendants', id], Immutable.List()).forEach(descendantId => { state.getIn(['descendants', id], ImmutableList()).forEach(descendantId => {
state = state.updateIn(['ancestors', descendantId], Immutable.List(), list => list.filterNot(itemId => itemId === id)); state = state.updateIn(['ancestors', descendantId], ImmutableList(), list => list.filterNot(itemId => itemId === id));
}); });
state.getIn(['ancestors', id], Immutable.List()).forEach(ancestorId => { state.getIn(['ancestors', id], ImmutableList()).forEach(ancestorId => {
state = state.updateIn(['descendants', ancestorId], Immutable.List(), list => list.filterNot(itemId => itemId === id)); state = state.updateIn(['descendants', ancestorId], ImmutableList(), list => list.filterNot(itemId => itemId === id));
}); });
state = state.deleteIn(['descendants', id]).deleteIn(['ancestors', id]); state = state.deleteIn(['descendants', id]).deleteIn(['ancestors', id]);
@ -34,7 +34,7 @@ const deleteFromContexts = (state, id) => {
export default function contexts(state = initialState, action) { export default function contexts(state = initialState, action) {
switch(action.type) { switch(action.type) {
case CONTEXT_FETCH_SUCCESS: case CONTEXT_FETCH_SUCCESS:
return normalizeContext(state, action.id, Immutable.fromJS(action.ancestors), Immutable.fromJS(action.descendants)); return normalizeContext(state, action.id, fromJS(action.ancestors), fromJS(action.descendants));
case TIMELINE_DELETE: case TIMELINE_DELETE:
return deleteFromContexts(state, action.id); return deleteFromContexts(state, action.id);
default: default:

View File

@ -1,7 +1,7 @@
import { STORE_HYDRATE } from '../actions/store'; import { STORE_HYDRATE } from '../actions/store';
import Immutable from 'immutable'; import { Map as ImmutableMap } from 'immutable';
const initialState = Immutable.Map({ const initialState = ImmutableMap({
accept_content_types: [], accept_content_types: [],
}); });

View File

@ -1,7 +1,7 @@
import { STORE_HYDRATE } from '../actions/store'; import { STORE_HYDRATE } from '../actions/store';
import Immutable from 'immutable'; import { Map as ImmutableMap } from 'immutable';
const initialState = Immutable.Map({ const initialState = ImmutableMap({
streaming_api_base_url: null, streaming_api_base_url: null,
access_token: null, access_token: null,
me: null, me: null,

View File

@ -11,10 +11,10 @@ import {
} from '../actions/notifications'; } from '../actions/notifications';
import { ACCOUNT_BLOCK_SUCCESS } from '../actions/accounts'; import { ACCOUNT_BLOCK_SUCCESS } from '../actions/accounts';
import { TIMELINE_DELETE } from '../actions/timelines'; import { TIMELINE_DELETE } from '../actions/timelines';
import Immutable from 'immutable'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
const initialState = Immutable.Map({ const initialState = ImmutableMap({
items: Immutable.List(), items: ImmutableList(),
next: null, next: null,
top: true, top: true,
unread: 0, unread: 0,
@ -22,7 +22,7 @@ const initialState = Immutable.Map({
isLoading: true, isLoading: true,
}); });
const notificationToMap = notification => Immutable.Map({ const notificationToMap = notification => ImmutableMap({
id: notification.id, id: notification.id,
type: notification.type, type: notification.type,
account: notification.account.id, account: notification.account.id,
@ -46,7 +46,7 @@ const normalizeNotification = (state, notification) => {
}; };
const normalizeNotifications = (state, notifications, next) => { const normalizeNotifications = (state, notifications, next) => {
let items = Immutable.List(); let items = ImmutableList();
const loaded = state.get('loaded'); const loaded = state.get('loaded');
notifications.forEach((n, i) => { notifications.forEach((n, i) => {
@ -64,7 +64,7 @@ const normalizeNotifications = (state, notifications, next) => {
}; };
const appendNormalizedNotifications = (state, notifications, next) => { const appendNormalizedNotifications = (state, notifications, next) => {
let items = Immutable.List(); let items = ImmutableList();
notifications.forEach((n, i) => { notifications.forEach((n, i) => {
items = items.set(i, notificationToMap(n)); items = items.set(i, notificationToMap(n));
@ -110,7 +110,7 @@ export default function notifications(state = initialState, action) {
case ACCOUNT_BLOCK_SUCCESS: case ACCOUNT_BLOCK_SUCCESS:
return filterNotifications(state, action.relationship); return filterNotifications(state, action.relationship);
case NOTIFICATIONS_CLEAR: case NOTIFICATIONS_CLEAR:
return state.set('items', Immutable.List()).set('next', null); return state.set('items', ImmutableList()).set('next', null);
case TIMELINE_DELETE: case TIMELINE_DELETE:
return deleteByStatus(state, action.id); return deleteByStatus(state, action.id);
default: default:

View File

@ -11,9 +11,9 @@ import {
DOMAIN_BLOCK_SUCCESS, DOMAIN_BLOCK_SUCCESS,
DOMAIN_UNBLOCK_SUCCESS, DOMAIN_UNBLOCK_SUCCESS,
} from '../actions/domain_blocks'; } from '../actions/domain_blocks';
import Immutable from 'immutable'; import { Map as ImmutableMap, fromJS } from 'immutable';
const normalizeRelationship = (state, relationship) => state.set(relationship.id, Immutable.fromJS(relationship)); const normalizeRelationship = (state, relationship) => state.set(relationship.id, fromJS(relationship));
const normalizeRelationships = (state, relationships) => { const normalizeRelationships = (state, relationships) => {
relationships.forEach(relationship => { relationships.forEach(relationship => {
@ -23,7 +23,7 @@ const normalizeRelationships = (state, relationships) => {
return state; return state;
}; };
const initialState = Immutable.Map(); const initialState = ImmutableMap();
export default function relationships(state = initialState, action) { export default function relationships(state = initialState, action) {
switch(action.type) { switch(action.type) {

View File

@ -7,13 +7,13 @@ import {
REPORT_STATUS_TOGGLE, REPORT_STATUS_TOGGLE,
REPORT_COMMENT_CHANGE, REPORT_COMMENT_CHANGE,
} from '../actions/reports'; } from '../actions/reports';
import Immutable from 'immutable'; import { Map as ImmutableMap, Set as ImmutableSet } from 'immutable';
const initialState = Immutable.Map({ const initialState = ImmutableMap({
new: Immutable.Map({ new: ImmutableMap({
isSubmitting: false, isSubmitting: false,
account_id: null, account_id: null,
status_ids: Immutable.Set(), status_ids: ImmutableSet(),
comment: '', comment: '',
}), }),
}); });
@ -26,14 +26,14 @@ export default function reports(state = initialState, action) {
map.setIn(['new', 'account_id'], action.account.get('id')); map.setIn(['new', 'account_id'], action.account.get('id'));
if (state.getIn(['new', 'account_id']) !== action.account.get('id')) { if (state.getIn(['new', 'account_id']) !== action.account.get('id')) {
map.setIn(['new', 'status_ids'], action.status ? Immutable.Set([action.status.getIn(['reblog', 'id'], action.status.get('id'))]) : Immutable.Set()); map.setIn(['new', 'status_ids'], action.status ? ImmutableSet([action.status.getIn(['reblog', 'id'], action.status.get('id'))]) : ImmutableSet());
map.setIn(['new', 'comment'], ''); map.setIn(['new', 'comment'], '');
} else { } else {
map.updateIn(['new', 'status_ids'], Immutable.Set(), set => set.add(action.status.getIn(['reblog', 'id'], action.status.get('id')))); map.updateIn(['new', 'status_ids'], ImmutableSet(), set => set.add(action.status.getIn(['reblog', 'id'], action.status.get('id'))));
} }
}); });
case REPORT_STATUS_TOGGLE: case REPORT_STATUS_TOGGLE:
return state.updateIn(['new', 'status_ids'], Immutable.Set(), set => { return state.updateIn(['new', 'status_ids'], ImmutableSet(), set => {
if (action.checked) { if (action.checked) {
return set.add(action.statusId); return set.add(action.statusId);
} }
@ -50,7 +50,7 @@ export default function reports(state = initialState, action) {
case REPORT_SUBMIT_SUCCESS: case REPORT_SUBMIT_SUCCESS:
return state.withMutations(map => { return state.withMutations(map => {
map.setIn(['new', 'account_id'], null); map.setIn(['new', 'account_id'], null);
map.setIn(['new', 'status_ids'], Immutable.Set()); map.setIn(['new', 'status_ids'], ImmutableSet());
map.setIn(['new', 'comment'], ''); map.setIn(['new', 'comment'], '');
map.setIn(['new', 'isSubmitting'], false); map.setIn(['new', 'isSubmitting'], false);
}); });

View File

@ -5,13 +5,13 @@ import {
SEARCH_SHOW, SEARCH_SHOW,
} from '../actions/search'; } from '../actions/search';
import { COMPOSE_MENTION, COMPOSE_REPLY } from '../actions/compose'; import { COMPOSE_MENTION, COMPOSE_REPLY } from '../actions/compose';
import Immutable from 'immutable'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
const initialState = Immutable.Map({ const initialState = ImmutableMap({
value: '', value: '',
submitted: false, submitted: false,
hidden: false, hidden: false,
results: Immutable.Map(), results: ImmutableMap(),
}); });
export default function search(state = initialState, action) { export default function search(state = initialState, action) {
@ -21,7 +21,7 @@ export default function search(state = initialState, action) {
case SEARCH_CLEAR: case SEARCH_CLEAR:
return state.withMutations(map => { return state.withMutations(map => {
map.set('value', ''); map.set('value', '');
map.set('results', Immutable.Map()); map.set('results', ImmutableMap());
map.set('submitted', false); map.set('submitted', false);
map.set('hidden', false); map.set('hidden', false);
}); });
@ -31,10 +31,10 @@ export default function search(state = initialState, action) {
case COMPOSE_MENTION: case COMPOSE_MENTION:
return state.set('hidden', true); return state.set('hidden', true);
case SEARCH_FETCH_SUCCESS: case SEARCH_FETCH_SUCCESS:
return state.set('results', Immutable.Map({ return state.set('results', ImmutableMap({
accounts: Immutable.List(action.results.accounts.map(item => item.id)), accounts: ImmutableList(action.results.accounts.map(item => item.id)),
statuses: Immutable.List(action.results.statuses.map(item => item.id)), statuses: ImmutableList(action.results.statuses.map(item => item.id)),
hashtags: Immutable.List(action.results.hashtags), hashtags: ImmutableList(action.results.hashtags),
})).set('submitted', true); })).set('submitted', true);
default: default:
return state; return state;

View File

@ -1,39 +1,39 @@
import { SETTING_CHANGE } from '../actions/settings'; import { SETTING_CHANGE } from '../actions/settings';
import { COLUMN_ADD, COLUMN_REMOVE, COLUMN_MOVE } from '../actions/columns'; import { COLUMN_ADD, COLUMN_REMOVE, COLUMN_MOVE } from '../actions/columns';
import { STORE_HYDRATE } from '../actions/store'; import { STORE_HYDRATE } from '../actions/store';
import Immutable from 'immutable'; import { Map as ImmutableMap, fromJS } from 'immutable';
import uuid from '../uuid'; import uuid from '../uuid';
const initialState = Immutable.Map({ const initialState = ImmutableMap({
onboarded: false, onboarded: false,
home: Immutable.Map({ home: ImmutableMap({
shows: Immutable.Map({ shows: ImmutableMap({
reblog: true, reblog: true,
reply: true, reply: true,
}), }),
regex: Immutable.Map({ regex: ImmutableMap({
body: '', body: '',
}), }),
}), }),
notifications: Immutable.Map({ notifications: ImmutableMap({
alerts: Immutable.Map({ alerts: ImmutableMap({
follow: true, follow: true,
favourite: true, favourite: true,
reblog: true, reblog: true,
mention: true, mention: true,
}), }),
shows: Immutable.Map({ shows: ImmutableMap({
follow: true, follow: true,
favourite: true, favourite: true,
reblog: true, reblog: true,
mention: true, mention: true,
}), }),
sounds: Immutable.Map({ sounds: ImmutableMap({
follow: true, follow: true,
favourite: true, favourite: true,
reblog: true, reblog: true,
@ -41,20 +41,20 @@ const initialState = Immutable.Map({
}), }),
}), }),
community: Immutable.Map({ community: ImmutableMap({
regex: Immutable.Map({ regex: ImmutableMap({
body: '', body: '',
}), }),
}), }),
public: Immutable.Map({ public: ImmutableMap({
regex: Immutable.Map({ regex: ImmutableMap({
body: '', body: '',
}), }),
}), }),
}); });
const defaultColumns = Immutable.fromJS([ const defaultColumns = fromJS([
{ id: 'COMPOSE', uuid: uuid(), params: {} }, { id: 'COMPOSE', uuid: uuid(), params: {} },
{ id: 'HOME', uuid: uuid(), params: {} }, { id: 'HOME', uuid: uuid(), params: {} },
{ id: 'NOTIFICATIONS', uuid: uuid(), params: {} }, { id: 'NOTIFICATIONS', uuid: uuid(), params: {} },
@ -82,7 +82,7 @@ export default function settings(state = initialState, action) {
case SETTING_CHANGE: case SETTING_CHANGE:
return state.setIn(action.key, action.value); return state.setIn(action.key, action.value);
case COLUMN_ADD: case COLUMN_ADD:
return state.update('columns', list => list.push(Immutable.fromJS({ id: action.id, uuid: uuid(), params: action.params }))); return state.update('columns', list => list.push(fromJS({ id: action.id, uuid: uuid(), params: action.params })));
case COLUMN_REMOVE: case COLUMN_REMOVE:
return state.update('columns', list => list.filterNot(item => item.get('uuid') === action.uuid)); return state.update('columns', list => list.filterNot(item => item.get('uuid') === action.uuid));
case COLUMN_MOVE: case COLUMN_MOVE:

View File

@ -2,13 +2,13 @@ import {
FAVOURITED_STATUSES_FETCH_SUCCESS, FAVOURITED_STATUSES_FETCH_SUCCESS,
FAVOURITED_STATUSES_EXPAND_SUCCESS, FAVOURITED_STATUSES_EXPAND_SUCCESS,
} from '../actions/favourites'; } from '../actions/favourites';
import Immutable from 'immutable'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
const initialState = Immutable.Map({ const initialState = ImmutableMap({
favourites: Immutable.Map({ favourites: ImmutableMap({
next: null, next: null,
loaded: false, loaded: false,
items: Immutable.List(), items: ImmutableList(),
}), }),
}); });
@ -16,7 +16,7 @@ const normalizeList = (state, listType, statuses, next) => {
return state.update(listType, listMap => listMap.withMutations(map => { return state.update(listType, listMap => listMap.withMutations(map => {
map.set('next', next); map.set('next', next);
map.set('loaded', true); map.set('loaded', true);
map.set('items', Immutable.List(statuses.map(item => item.id))); map.set('items', ImmutableList(statuses.map(item => item.id)));
})); }));
}; };

View File

@ -33,7 +33,7 @@ import {
FAVOURITED_STATUSES_EXPAND_SUCCESS, FAVOURITED_STATUSES_EXPAND_SUCCESS,
} from '../actions/favourites'; } from '../actions/favourites';
import { SEARCH_FETCH_SUCCESS } from '../actions/search'; import { SEARCH_FETCH_SUCCESS } from '../actions/search';
import Immutable from 'immutable'; import { Map as ImmutableMap, fromJS } from 'immutable';
const normalizeStatus = (state, status) => { const normalizeStatus = (state, status) => {
if (!status) { if (!status) {
@ -51,7 +51,7 @@ const normalizeStatus = (state, status) => {
const searchContent = [status.spoiler_text, status.content].join(' ').replace(/<br \/>/g, '\n').replace(/<\/p><p>/g, '\n\n'); const searchContent = [status.spoiler_text, status.content].join(' ').replace(/<br \/>/g, '\n').replace(/<\/p><p>/g, '\n\n');
normalStatus.search_index = new DOMParser().parseFromString(searchContent, 'text/html').documentElement.textContent; normalStatus.search_index = new DOMParser().parseFromString(searchContent, 'text/html').documentElement.textContent;
return state.update(status.id, Immutable.Map(), map => map.mergeDeep(Immutable.fromJS(normalStatus))); return state.update(status.id, ImmutableMap(), map => map.mergeDeep(fromJS(normalStatus)));
}; };
const normalizeStatuses = (state, statuses) => { const normalizeStatuses = (state, statuses) => {
@ -82,7 +82,7 @@ const filterStatuses = (state, relationship) => {
return state; return state;
}; };
const initialState = Immutable.Map(); const initialState = ImmutableMap();
export default function statuses(state = initialState, action) { export default function statuses(state = initialState, action) {
switch(action.type) { switch(action.type) {

View File

@ -15,25 +15,25 @@ import {
ACCOUNT_BLOCK_SUCCESS, ACCOUNT_BLOCK_SUCCESS,
ACCOUNT_MUTE_SUCCESS, ACCOUNT_MUTE_SUCCESS,
} from '../actions/accounts'; } from '../actions/accounts';
import Immutable from 'immutable'; import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable';
const initialState = Immutable.Map(); const initialState = ImmutableMap();
const initialTimeline = Immutable.Map({ const initialTimeline = ImmutableMap({
unread: 0, unread: 0,
online: false, online: false,
top: true, top: true,
loaded: false, loaded: false,
isLoading: false, isLoading: false,
next: false, next: false,
items: Immutable.List(), items: ImmutableList(),
}); });
const normalizeTimeline = (state, timeline, statuses, next) => { const normalizeTimeline = (state, timeline, statuses, next) => {
const ids = Immutable.List(statuses.map(status => status.get('id'))); const ids = ImmutableList(statuses.map(status => status.get('id')));
const wasLoaded = state.getIn([timeline, 'loaded']); const wasLoaded = state.getIn([timeline, 'loaded']);
const hadNext = state.getIn([timeline, 'next']); const hadNext = state.getIn([timeline, 'next']);
const oldIds = state.getIn([timeline, 'items'], Immutable.List()); const oldIds = state.getIn([timeline, 'items'], ImmutableList());
return state.update(timeline, initialTimeline, map => map.withMutations(mMap => { return state.update(timeline, initialTimeline, map => map.withMutations(mMap => {
mMap.set('loaded', true); mMap.set('loaded', true);
@ -44,8 +44,8 @@ const normalizeTimeline = (state, timeline, statuses, next) => {
}; };
const appendNormalizedTimeline = (state, timeline, statuses, next) => { const appendNormalizedTimeline = (state, timeline, statuses, next) => {
const ids = Immutable.List(statuses.map(status => status.get('id'))); const ids = ImmutableList(statuses.map(status => status.get('id')));
const oldIds = state.getIn([timeline, 'items'], Immutable.List()); const oldIds = state.getIn([timeline, 'items'], ImmutableList());
return state.update(timeline, initialTimeline, map => map.withMutations(mMap => { return state.update(timeline, initialTimeline, map => map.withMutations(mMap => {
mMap.set('isLoading', false); mMap.set('isLoading', false);
@ -56,7 +56,7 @@ const appendNormalizedTimeline = (state, timeline, statuses, next) => {
const updateTimeline = (state, timeline, status, references) => { const updateTimeline = (state, timeline, status, references) => {
const top = state.getIn([timeline, 'top']); const top = state.getIn([timeline, 'top']);
const ids = state.getIn([timeline, 'items'], Immutable.List()); const ids = state.getIn([timeline, 'items'], ImmutableList());
const includesId = ids.includes(status.get('id')); const includesId = ids.includes(status.get('id'));
const unread = state.getIn([timeline, 'unread'], 0); const unread = state.getIn([timeline, 'unread'], 0);
@ -124,11 +124,11 @@ export default function timelines(state = initialState, action) {
case TIMELINE_EXPAND_FAIL: case TIMELINE_EXPAND_FAIL:
return state.update(action.timeline, initialTimeline, map => map.set('isLoading', false)); return state.update(action.timeline, initialTimeline, map => map.set('isLoading', false));
case TIMELINE_REFRESH_SUCCESS: case TIMELINE_REFRESH_SUCCESS:
return normalizeTimeline(state, action.timeline, Immutable.fromJS(action.statuses), action.next); return normalizeTimeline(state, action.timeline, fromJS(action.statuses), action.next);
case TIMELINE_EXPAND_SUCCESS: case TIMELINE_EXPAND_SUCCESS:
return appendNormalizedTimeline(state, action.timeline, Immutable.fromJS(action.statuses), action.next); return appendNormalizedTimeline(state, action.timeline, fromJS(action.statuses), action.next);
case TIMELINE_UPDATE: case TIMELINE_UPDATE:
return updateTimeline(state, action.timeline, Immutable.fromJS(action.status), action.references); return updateTimeline(state, action.timeline, fromJS(action.status), action.references);
case TIMELINE_DELETE: case TIMELINE_DELETE:
return deleteStatus(state, action.id, action.accountId, action.references, action.reblogOf); return deleteStatus(state, action.id, action.accountId, action.references, action.reblogOf);
case ACCOUNT_BLOCK_SUCCESS: case ACCOUNT_BLOCK_SUCCESS:

View File

@ -20,22 +20,22 @@ import {
MUTES_FETCH_SUCCESS, MUTES_FETCH_SUCCESS,
MUTES_EXPAND_SUCCESS, MUTES_EXPAND_SUCCESS,
} from '../actions/mutes'; } from '../actions/mutes';
import Immutable from 'immutable'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
const initialState = Immutable.Map({ const initialState = ImmutableMap({
followers: Immutable.Map(), followers: ImmutableMap(),
following: Immutable.Map(), following: ImmutableMap(),
reblogged_by: Immutable.Map(), reblogged_by: ImmutableMap(),
favourited_by: Immutable.Map(), favourited_by: ImmutableMap(),
follow_requests: Immutable.Map(), follow_requests: ImmutableMap(),
blocks: Immutable.Map(), blocks: ImmutableMap(),
mutes: Immutable.Map(), mutes: ImmutableMap(),
}); });
const normalizeList = (state, type, id, accounts, next) => { const normalizeList = (state, type, id, accounts, next) => {
return state.setIn([type, id], Immutable.Map({ return state.setIn([type, id], ImmutableMap({
next, next,
items: Immutable.List(accounts.map(item => item.id)), items: ImmutableList(accounts.map(item => item.id)),
})); }));
}; };
@ -56,22 +56,22 @@ export default function userLists(state = initialState, action) {
case FOLLOWING_EXPAND_SUCCESS: case FOLLOWING_EXPAND_SUCCESS:
return appendToList(state, 'following', action.id, action.accounts, action.next); return appendToList(state, 'following', action.id, action.accounts, action.next);
case REBLOGS_FETCH_SUCCESS: case REBLOGS_FETCH_SUCCESS:
return state.setIn(['reblogged_by', action.id], Immutable.List(action.accounts.map(item => item.id))); return state.setIn(['reblogged_by', action.id], ImmutableList(action.accounts.map(item => item.id)));
case FAVOURITES_FETCH_SUCCESS: case FAVOURITES_FETCH_SUCCESS:
return state.setIn(['favourited_by', action.id], Immutable.List(action.accounts.map(item => item.id))); return state.setIn(['favourited_by', action.id], ImmutableList(action.accounts.map(item => item.id)));
case FOLLOW_REQUESTS_FETCH_SUCCESS: case FOLLOW_REQUESTS_FETCH_SUCCESS:
return state.setIn(['follow_requests', 'items'], Immutable.List(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next); return state.setIn(['follow_requests', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next);
case FOLLOW_REQUESTS_EXPAND_SUCCESS: case FOLLOW_REQUESTS_EXPAND_SUCCESS:
return state.updateIn(['follow_requests', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next); return state.updateIn(['follow_requests', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next);
case FOLLOW_REQUEST_AUTHORIZE_SUCCESS: case FOLLOW_REQUEST_AUTHORIZE_SUCCESS:
case FOLLOW_REQUEST_REJECT_SUCCESS: case FOLLOW_REQUEST_REJECT_SUCCESS:
return state.updateIn(['follow_requests', 'items'], list => list.filterNot(item => item === action.id)); return state.updateIn(['follow_requests', 'items'], list => list.filterNot(item => item === action.id));
case BLOCKS_FETCH_SUCCESS: case BLOCKS_FETCH_SUCCESS:
return state.setIn(['blocks', 'items'], Immutable.List(action.accounts.map(item => item.id))).setIn(['blocks', 'next'], action.next); return state.setIn(['blocks', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['blocks', 'next'], action.next);
case BLOCKS_EXPAND_SUCCESS: case BLOCKS_EXPAND_SUCCESS:
return state.updateIn(['blocks', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['blocks', 'next'], action.next); return state.updateIn(['blocks', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['blocks', 'next'], action.next);
case MUTES_FETCH_SUCCESS: case MUTES_FETCH_SUCCESS:
return state.setIn(['mutes', 'items'], Immutable.List(action.accounts.map(item => item.id))).setIn(['mutes', 'next'], action.next); return state.setIn(['mutes', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['mutes', 'next'], action.next);
case MUTES_EXPAND_SUCCESS: case MUTES_EXPAND_SUCCESS:
return state.updateIn(['mutes', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['mutes', 'next'], action.next); return state.updateIn(['mutes', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['mutes', 'next'], action.next);
default: default:

View File

@ -1,5 +1,5 @@
import { createSelector } from 'reselect'; import { createSelector } from 'reselect';
import Immutable from 'immutable'; import { List as ImmutableList } from 'immutable';
const getAccountBase = (state, id) => state.getIn(['accounts', id], null); const getAccountBase = (state, id) => state.getIn(['accounts', id], null);
const getAccountCounters = (state, id) => state.getIn(['accounts_counters', id], null); const getAccountCounters = (state, id) => state.getIn(['accounts_counters', id], null);
@ -73,10 +73,10 @@ export const makeGetNotification = () => {
}; };
export const getAccountGallery = createSelector([ export const getAccountGallery = createSelector([
(state, id) => state.getIn(['timelines', `account:${id}:media`, 'items'], Immutable.List()), (state, id) => state.getIn(['timelines', `account:${id}:media`, 'items'], ImmutableList()),
state => state.get('statuses'), state => state.get('statuses'),
], (statusIds, statuses) => { ], (statusIds, statuses) => {
let medias = Immutable.List(); let medias = ImmutableList();
statusIds.forEach(statusId => { statusIds.forEach(statusId => {
const status = statuses.get(statusId); const status = statuses.get(statusId);

View File

@ -1,12 +1,12 @@
import { expect } from 'chai'; import { expect } from 'chai';
import { render } from 'enzyme'; import { render } from 'enzyme';
import Immutable from 'immutable'; import { fromJS } from 'immutable';
import React from 'react'; import React from 'react';
import DisplayName from '../../../app/javascript/mastodon/components/display_name'; import DisplayName from '../../../app/javascript/mastodon/components/display_name';
describe('<DisplayName />', () => { describe('<DisplayName />', () => {
it('renders display name + account name', () => { it('renders display name + account name', () => {
const account = Immutable.fromJS({ const account = fromJS({
username: 'bar', username: 'bar',
acct: 'bar@baz', acct: 'bar@baz',
display_name: 'Foo', display_name: 'Foo',
@ -16,7 +16,7 @@ describe('<DisplayName />', () => {
}); });
it('renders the username + account name if display name is empty', () => { it('renders the username + account name if display name is empty', () => {
const account = Immutable.fromJS({ const account = fromJS({
username: 'bar', username: 'bar',
acct: 'bar@baz', acct: 'bar@baz',
display_name: '', display_name: '',