123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- import type {StoreDefinition} from 'reflux';
- import {createStore} from 'reflux';
- import type {User} from 'sentry/types/user';
- type State = {
- cursor: string | null;
- hasMore: boolean | null;
- loading: boolean;
- members: User[];
- };
- // XXX(epurkhiser): Either this store is completely wrong, or it is misnamed, a
- // `Member` has one `User`, this stores users not members.
- interface MemberListStoreDefinition extends StoreDefinition {
- getAll(): User[];
- getById(memberId: string): User | undefined;
- getState(): State;
- init(): void;
- loadInitialData(items: User[], hasMore?: boolean | null, cursor?: string | null): void;
- reset(): void;
- state: State;
- }
- const storeConfig: MemberListStoreDefinition = {
- state: {
- members: [],
- loading: true,
- hasMore: null,
- cursor: null,
- },
- init() {
- // XXX: Do not use `this.listenTo` in this store. We avoid usage of reflux
- // listeners due to their leaky nature in tests.
- this.reset();
- },
- reset() {
- this.state = {
- members: [],
- loading: true,
- hasMore: null,
- cursor: null,
- };
- },
- loadInitialData(items: User[], hasMore, cursor) {
- this.state = {
- members: items,
- loading: false,
- hasMore: hasMore ?? this.state.hasMore,
- cursor: cursor ?? this.state.cursor,
- };
- this.trigger(this.state, 'initial');
- },
- getById(memberId) {
- return this.state.members.find(({id}) => memberId === id);
- },
- getAll() {
- return this.state.members;
- },
- getState() {
- return this.state;
- },
- };
- const MemberListStore = createStore(storeConfig);
- export default MemberListStore;
|