Skip to content

Commit

Permalink
Merge pull request #889 from ubyssey/peter/podcast-field
Browse files Browse the repository at this point in the history
Add PodcastField
  • Loading branch information
psiemens authored Oct 26, 2018
2 parents e2b03e1 + 89d396e commit 51d50b8
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 9 deletions.
5 changes: 4 additions & 1 deletion dispatch/static/manager/src/js/actions/ZonesActions.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ import {
articleSchema,
imageSchema,
eventSchema,
topicSchema
topicSchema,
podcastEpisodeSchema,
} from '../constants/Schemas'

function normalizeZoneData(field, data) {
Expand All @@ -25,6 +26,8 @@ function normalizeZoneData(field, data) {
return field.many ? normalize(data, arrayOf(eventSchema)) : normalize(data, eventSchema)
case 'topic':
return field.many ? normalize(data, arrayOf(topicSchema)) : normalize(data, topicSchema)
case 'podcast':
return field.many ? normalize(data, arrayOf(podcastEpisodeSchema)) : normalize(data, podcastEpisodeSchema)
case 'widget':
return normalizeZone(data, true)
default:
Expand Down
12 changes: 12 additions & 0 deletions dispatch/static/manager/src/js/components/fields/PodcastField.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import React from 'react'

import PodcastEpisodeSelectInput from '../inputs/selects/PodcastEpisodeSelectInput'

export default function PodcastField(props) {
return (
<PodcastEpisodeSelectInput
value={props.data}
many={props.field.many}
onChange={selected => props.onChange(selected)} />
)
}
2 changes: 2 additions & 0 deletions dispatch/static/manager/src/js/components/fields/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import BoolField from './BoolField'
import SelectField from './SelectField'
import WidgetField from './WidgetField'
import PollField from './PollField'
import PodcastField from './PodcastField'
import InstructionField from './InstructionField'
import TopicField from './TopicField'

Expand All @@ -26,4 +27,5 @@ export {
PollField as poll,
InstructionField as instruction,
TopicField as topic,
PodcastField as podcast,
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ class PodcastEpisodeSelectInputComponent extends React.Component {
return (
<ItemSelectInput
value={this.props.value}
many={this.props.many}
results={this.props.podcastEpisodes.ids}
entities={this.props.entities.podcastEpisodes}
onChange={(value) => this.props.onChange(value)}
Expand Down
16 changes: 8 additions & 8 deletions dispatch/theme/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
from django.utils.dateparse import parse_datetime
from django.core.exceptions import ObjectDoesNotExist

from dispatch.models import Article, Image, Poll
from dispatch.models import Article, Image, Poll, PodcastEpisode
from dispatch.api.serializers import (
ArticleSerializer, ImageSerializer, TopicSerializer,
WidgetSerializer, PollSerializer)
WidgetSerializer, PollSerializer, PodcastEpisodeSerializer)

from dispatch.theme.exceptions import InvalidField, WidgetNotFound
from dispatch.theme.validators import is_valid_id
Expand Down Expand Up @@ -256,6 +256,12 @@ class PollField(ModelField):
model = Poll
serializer = PollSerializer

class PodcastField(ModelField):
type = 'podcast'

model = PodcastEpisode
serializer = PodcastEpisodeSerializer

class WidgetField(Field):
type = 'widget'

Expand Down Expand Up @@ -343,12 +349,6 @@ def prepare_data(self, data):
widget.set_data(data['data'])
return widget

class PollField(ModelField):
type = 'poll'

model = Poll
serializer = PollSerializer

class InstructionField(Field):
type = 'instruction'

Expand Down

0 comments on commit 51d50b8

Please sign in to comment.