Exemple #1
0
const fetchFeedCommand = commandFactory<FetchFeedPayload>(async ({ get, path, payload: { type, page, filter } }) => {
	const token = get(path('user', 'token'));
	const offset = page * 10;
	let url: string;

	switch (type) {
		case 'feed':
			url = `${baseUrl}/articles/feed?`;
			break;
		case 'favorites':
			url = `${baseUrl}/articles?favorited=${filter}&`;
			break;
		case 'user':
			url = `${baseUrl}/articles?author=${filter}&`;
			break;
		case 'tag':
			url = `${baseUrl}/articles?tag=${filter}&`;
			break;
		default:
			url = `${baseUrl}/articles/?`;
			break;
	}

	const response = await fetch(`${url}limit=10&offset=${offset}`, { headers: getHeaders(token) });
	const json = await response.json();
	return [
		replace(path('feed', 'items'), json.articles),
		replace(path('feed', 'total'), json.articlesCount),
		replace(path('feed', 'offset'), offset),
		replace(path('feed', 'loading'), false),
		replace(path('feed', 'loaded'), true)
	];
});
Exemple #2
0
const clearRegisterInputs = commandFactory(({ path }) => {
	return [
		replace(path('register', 'password'), ''),
		replace(path('register', 'email'), ''),
		replace(path('register', 'username'), '')
	];
});
Exemple #3
0
const registerCommand = commandFactory(async ({ get, path }) => {
	const requestPayload = {
		user: get(path('register'))
	};

	const response = await fetch(`${baseUrl}/users`, {
		method: 'post',
		body: JSON.stringify(requestPayload),
		headers: getHeaders()
	});
	const json = await response.json();
	if (!response.ok) {
		return [
			replace(path('register', 'failed'), true),
			replace(path('register', 'loading'), false),
			replace(path('errors'), json.errors),
			replace(path('user'), {})
		];
	}

	global.sessionStorage.setItem('conduit-session', JSON.stringify(json.user));

	return [
		replace(path('routing', 'outlet'), 'home'),
		replace(path('register', 'loading'), false),
		replace(path('errors'), undefined),
		replace(path('user'), json.user),
		replace(path('feed', 'items'), undefined),
		replace(path('feed', 'loaded'), false)
	];
});
Exemple #4
0
const saveTodoCommand = commandFactory(({ get, path }): PatchOperation[] => {
	const editedTodo = get(path('editedTodo'));

	return editedTodo ? [
		replace(path('todos', editedTodo.id), editedTodo),
		replace(path('editedTodo'), undefined)
	] : [];
});
Exemple #5
0
const startLoadingArticleCommand = commandFactory(({ path }) => {
	return [
		replace(path('article', 'item'), undefined),
		replace(path('article', 'comments'), []),
		replace(path('article', 'loading'), true),
		replace(path('article', 'loaded'), false)
	];
});
Exemple #6
0
const updateTodoCountsCommand = commandFactory(({ get, path }): PatchOperation[] => {
	const todos = get(path('todos'));
	const todoArray = Object.keys(todos).map(key => todos[key]);

	return [
		replace(path('todoCount'), todoArray.length),
		replace(path('completedCount'), todoArray.filter(({ completed }) => completed).length)
	];
});
Exemple #7
0
const loadArticleCommand = commandFactory<SlugPayload>(async ({ get, path, payload: { slug } }) => {
	const token = get(path('user', 'token'));
	const response = await fetch(`${baseUrl}/articles/${slug}`, {
		headers: getHeaders(token)
	});
	const json = await response.json();

	return [
		replace(path('article', 'item'), json.article),
		replace(path('article', 'loading'), false),
		replace(path('article', 'loaded'), true)
	];
});
Exemple #8
0
const getProfileCommand = commandFactory<UsernamePayload>(async ({ get, path, payload: { username } }) => {
	const token = get(path('user', 'token'));
	const response = await fetch(`${baseUrl}/profiles/${username}`, {
		headers: getHeaders(token)
	});
	const json = await response.json();

	return [
		replace(path('profile', 'image'), json.profile.image),
		replace(path('profile', 'bio'), json.profile.bio),
		replace(path('profile', 'following'), json.profile.following),
		replace(path('profile', 'loading'), false),
		replace(path('profile', 'loaded'), true)
	];
});
Exemple #9
0
const updateCompletedFlagCommand = commandFactory(({ get, path }): PatchOperation[] => {
	const todoCount = get(path('todoCount'));
	const completed = todoCount > 0 && todoCount === get(path('completedCount'));

	return [
		replace(path('completed'), completed)
	];
});
Exemple #10
0
const toggleTodoCommand = commandFactory(({ get, path, payload: { id } }): PatchOperation[] => {
	const completed = !get(path('todos', id, 'completed'));

	return [
		replace(path('todos', id, 'completed'), completed)
	];

});