forked from DebaucheryLibrarian/traxxx
				
			
		
			
				
	
	
		
			280 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			280 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| import { graphql } from '../api';
 | |
| // import { sitesFragment, releaseFields } from '../fragments';
 | |
| import { releaseFields } from '../fragments';
 | |
| import { curateEntity } from '../curate';
 | |
| import getDateRange from '../get-date-range';
 | |
| 
 | |
| function initEntitiesActions(store, router) {
 | |
| 	async function fetchEntityBySlugAndType({ _commit }, {
 | |
| 		entitySlug,
 | |
| 		entityType,
 | |
| 		limit = 10,
 | |
| 		pageNumber = 1,
 | |
| 		range = 'latest',
 | |
| 	}) {
 | |
| 		const { before, after, orderBy } = getDateRange(range);
 | |
| 
 | |
| 		const { entity, connection: { releases, totalCount } } = await graphql(`
 | |
|             query Entity(
 | |
|                 $entitySlug: String!
 | |
|                 $entityType: String! = "channel"
 | |
|                 $limit: Int = 10,
 | |
|                 $offset: Int = 0,
 | |
|                 $after: Datetime = "1900-01-01",
 | |
|                 $before: Datetime = "2100-01-01",
 | |
|                 $afterTime: Datetime = "1900-01-01",
 | |
|                 $beforeTime: Datetime = "2100-01-01",
 | |
|                 $orderBy: [ReleasesOrderBy!]
 | |
|                 $exclude: [String!]
 | |
|             ) {
 | |
| 				entity: entityBySlugAndType(slug: $entitySlug, type: $entityType) {
 | |
|                     id
 | |
|                     name
 | |
|                     slug
 | |
|                     url
 | |
| 					independent
 | |
| 					hasLogo
 | |
| 					tags: entitiesTags {
 | |
| 						tag {
 | |
| 							id
 | |
| 							name
 | |
| 							slug
 | |
| 						}
 | |
| 					}
 | |
| 					children: childEntitiesConnection(
 | |
|                         orderBy: [PRIORITY_DESC, NAME_ASC],
 | |
| 						filter: {
 | |
| 							type: {
 | |
| 								notEqualTo: "info"
 | |
| 							}
 | |
| 							visible: {
 | |
| 								equalTo: true
 | |
| 							}
 | |
| 						}
 | |
|                     ) {
 | |
| 						nodes {
 | |
| 							id
 | |
| 							name
 | |
| 							slug
 | |
| 							url
 | |
| 							type
 | |
| 							priority
 | |
| 							independent
 | |
| 							hasLogo
 | |
| 						}
 | |
|                     }
 | |
|                     parent {
 | |
|                         id
 | |
|                         name
 | |
|                         slug
 | |
| 						type
 | |
|                         url
 | |
| 						independent
 | |
| 						hasLogo
 | |
|                     }
 | |
|                 }
 | |
| 				connection: releasesConnection(
 | |
| 					first: $limit
 | |
| 					offset: $offset
 | |
| 					orderBy: $orderBy
 | |
| 					filter: {
 | |
| 						and: [
 | |
| 							{
 | |
| 								entity: {
 | |
| 									or: [
 | |
| 										{
 | |
| 											slug: { equalTo: $entitySlug }
 | |
| 										},
 | |
| 										{
 | |
| 											parent: {
 | |
| 												slug: { equalTo: $entitySlug }
 | |
| 												type: { equalTo: $entityType }
 | |
| 											}
 | |
| 										},
 | |
| 										{
 | |
| 											parent: {
 | |
| 												parent: {
 | |
| 													slug: { equalTo: $entitySlug }
 | |
| 													type: { equalTo: $entityType }
 | |
| 												}
 | |
| 											}
 | |
| 										}
 | |
| 										{
 | |
| 											parent: {
 | |
| 												parent: {
 | |
| 													parent: {
 | |
| 														slug: { equalTo: $entitySlug }
 | |
| 														type: { equalTo: $entityType }
 | |
| 													}
 | |
| 												},
 | |
| 											},
 | |
| 										},
 | |
| 									]
 | |
| 								}
 | |
| 							}
 | |
| 							{
 | |
| 								or: [
 | |
| 									{
 | |
| 										date: {
 | |
| 											lessThan: $before,
 | |
| 											greaterThan: $after
 | |
| 										}
 | |
| 									},
 | |
| 									{
 | |
| 										date: {
 | |
| 											isNull: true
 | |
| 										},
 | |
| 										createdAt: {
 | |
| 											lessThan: $beforeTime,
 | |
| 											greaterThan: $afterTime,
 | |
| 										}
 | |
| 									}
 | |
| 								]
 | |
| 							}
 | |
| 						]
 | |
| 						releasesTagsConnection: {
 | |
| 							none: {
 | |
| 								tag: {
 | |
| 									slug: {
 | |
| 										in: $exclude
 | |
| 									}
 | |
| 								}
 | |
| 							}
 | |
| 						}
 | |
| 					}
 | |
| 				) {
 | |
| 					releases: nodes {
 | |
| 						${releaseFields}
 | |
| 					}
 | |
| 					totalCount
 | |
| 				}
 | |
|             }
 | |
|         `, {
 | |
| 			entitySlug,
 | |
| 			entityType,
 | |
| 			limit,
 | |
| 			offset: Math.max(0, (pageNumber - 1)) * limit,
 | |
| 			after,
 | |
| 			before,
 | |
| 			orderBy,
 | |
| 			afterTime: store.getters.after,
 | |
| 			beforeTime: store.getters.before,
 | |
| 			exclude: store.state.ui.tagFilter,
 | |
| 		});
 | |
| 
 | |
| 		if (!entity) {
 | |
| 			router.replace('/not-found');
 | |
| 			return null;
 | |
| 		}
 | |
| 
 | |
| 		return {
 | |
| 			entity: curateEntity(entity, null, releases),
 | |
| 			totalCount,
 | |
| 		};
 | |
| 	}
 | |
| 
 | |
| 	async function fetchEntities({ _commit }, { type, entitySlugs }) {
 | |
| 		const { entities } = await graphql(`
 | |
|             query Entities(
 | |
| 				$entitySlugs: [String!] = []
 | |
| 			) {
 | |
| 				entities(
 | |
| 					orderBy: SLUG_ASC
 | |
| 					filter: {
 | |
| 						or: [
 | |
| 							{
 | |
| 								type: {
 | |
| 									equalTo: "network"
 | |
| 								}
 | |
| 								childEntitiesConnection: {
 | |
| 									some: {
 | |
| 										type: {
 | |
| 											equalTo: "channel"
 | |
| 										}
 | |
| 										independent: {
 | |
| 											notEqualTo: true
 | |
| 										}
 | |
| 									}
 | |
| 								}
 | |
| 							}
 | |
| 							{
 | |
| 								independent: {
 | |
| 									equalTo: true
 | |
| 								}
 | |
| 							}
 | |
| 							{
 | |
| 								type: {
 | |
| 									equalTo: "channel"
 | |
| 								}
 | |
| 								parentExists: false
 | |
| 							}
 | |
| 							{
 | |
| 								slug: {
 | |
| 									in: $entitySlugs
 | |
| 								}
 | |
| 							}
 | |
| 						],
 | |
| 					}
 | |
| 				) {
 | |
|                     id
 | |
|                     name
 | |
|                     slug
 | |
| 					type
 | |
|                     url
 | |
| 					independent
 | |
| 					hasLogo
 | |
| 					children: childEntitiesConnection {
 | |
| 						totalCount
 | |
| 					}
 | |
|                 }
 | |
|             }
 | |
|         `, {
 | |
| 			type,
 | |
| 			entitySlugs,
 | |
| 		});
 | |
| 
 | |
| 		return entities.map(entity => curateEntity(entity));
 | |
| 	}
 | |
| 
 | |
| 	async function searchEntities({ _commit }, { query, limit = 20 }) {
 | |
| 		const { entities } = await graphql(`
 | |
|             query SearchEntities(
 | |
|                 $query: String!
 | |
|                 $limit:Int = 20,
 | |
|             ) {
 | |
|                 entities: searchEntities(
 | |
|                     search: $query,
 | |
|                     first: $limit
 | |
|                 ) {
 | |
|                     name
 | |
|                     slug
 | |
| 					type
 | |
|                     url
 | |
| 					independent
 | |
| 					hasLogo
 | |
|                     parent {
 | |
|                         name
 | |
|                         slug
 | |
| 						type
 | |
|                         url
 | |
| 						hasLogo
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         `, {
 | |
| 			query,
 | |
| 			limit,
 | |
| 		});
 | |
| 
 | |
| 		return entities.map(entity => curateEntity(entity));
 | |
| 	}
 | |
| 
 | |
| 	return {
 | |
| 		fetchEntityBySlugAndType,
 | |
| 		fetchEntities,
 | |
| 		searchEntities,
 | |
| 	};
 | |
| }
 | |
| 
 | |
| export default initEntitiesActions;
 |